navigationBar
当translucent = YES(默认值) 时,UIViewController中self.view的原点是(0,0)
当translucent = NO时,UIViewController中self.view的原点是(0, navigationBar.bottom ))从导航栏底部开始 64或者 88
如果设置了背景颜色\背景图片 等于设置了 translucent = no;
当navigationBar.translucent为NO的时候,不管edgesForExtendedLayout怎么设置,view 的视图 都是从navigationBar 下方算起
tabBar
当translucent = YES(默认值) 时,UIViewController中 self.view 的底部 与屏幕保持一致,会被tabbr 遮盖。
当translucent = NO时,UIViewController中 self.view 的底部截止到 tabBar上方为止,不会被遮盖。
当设置tabBar的backgroundImage,shadowImage时,也相当于translucent = NO ,view 会被tabBar遮挡
当translucent = NO的时候,不管edgesForExtendedLayout怎么设置,view 的视图底部 都是 在tabBar上方。
在tabBar 中 设置 :self.shadowImage = [UIImage new]; self.backgroundImage = [UIImage new]; 不影响translucent = YES 。设置成具体的图片会影响。
edgesForExtendedLayout :可以根据这个属性设置view 的铺满样式。 self.view能延伸到屏幕的方向
默认情况下,从一个普通的UIViewController跳转到一个UINavigationController,view默认的展示样式是从导航栏底部开始。
可以通过设置edgesForExtendedLayout 为不同类型来控制view的样式(top, left, bottom, right)。
edgesForExtendedLayout的默认 值是UIRectEdgeAll,所以view是延伸到整个屏幕的高度,穿透了navbar 和 tabbar .
extendedLayoutIncludesOpaqueBars :不透明的条下是否可以扩展默认值是NO; ,也就是不可以扩展 ,只在不透明的时候有作用。
1:默认的 navigationBar 是半透明的:translucent = YES; 此时设置extendedLayoutIncludesOpaqueBars这个属性为YES/NO 都是没有作用的。
2:如果navigationBar不透明:translucent = NO; VC的 view 不会穿透navigationBar 。
当translucent设置为NO: 导航栏UINavigationBar不透明的时候,默认不能扩展。
此时想穿透navigationBar 要设置:extendedLayoutIncludesOpaqueBars = YES 才有效果
注意:如果状态栏不透明,即使你设置edgesForExtendedLayout为UIRectEdgeAll,extendedLayoutIncludesOpaqueBars为NO(默认),view不会延伸到状态栏底部的。
当navigationBar.translucent为NO的时候,不管edgesForExtendedLayout怎么设置,控图的原点值都是从导航栏下方算起
self.navigationController.navigationBar.translucent = NO; //这句话的意思就是让导航栏不透明且占空间位置,所以我们的坐标就会从导航栏下面开始算起。
隐藏导航栏,对于view来说,就好像没有嵌入navigationController ,即使设置了edgesForExtendedLayout 属性也没有效果。view 的起点是屏幕的左上角,与屏幕起点相同。
view被遮挡,默认被装入UINavigationController的子ViewController的view是全屏的,那么会导致子ViewController的view的上部会被UINavigationController的navigation bar 挡住。
结论:
1: 需要VC的view 占满全屏幕:
edgesForExtendedLayout = UIRectEdgeAll (默认)
translucent = YES (默认)
translucent = NO && extendedLayoutIncludesOpaqueBars = YES
self.navigationController.navigationBar.hidden = YES
2: 需要VC的view 从navigationBar下面开始:
translucent = NO && extendedLayoutIncludesOpaqueBars = NO (extendedLayoutIncludesOpaqueBars是系统默认NO,可以不设置)
参考:
edgesForExtendedLayout&& extendedLayoutIncludesOpaqueBars&&translucent_诺离〆的博客-CSDN博客
UINavigationController的导航栏的遮挡和透明_forwardto9的专栏-CSDN博客
网友评论