默认:
UIVIew的frame的Y值与导航条的translucent有直接关系
translucent:半透明的
navigationBar.translucent= YES
View视图的 y 值从 0 计算
navigationBar.translucent= NO
View视图y值从导航条底部 64或 88 计算。
先结论:
edgesForExtendedLayout 控制 vc的view 是否占据整个屏幕
导航条半透明 下 有效
导航条不透明,需要添加
extendedLayoutIncludesOpaqueBars 为YES 一起,edgesForExtendedLayout才生效
分析:
edgesForExtendedLayout
该属性能够使控制器的view向四周延伸,直到view占据整个屏幕。
该属性默认值为UIRectEdgeAll(向四周延伸)。
如果设为UIRectEdgeNone(不延伸),
view就会从navigationBar的底部开始到tabBar上边结束。
automaticallyAdjustsScrollViewInsets
这个属性常用于当控制器view为UIScrollView或者其子类(如UITableView)时。在edgesForExtendedLayout = UIRectEdgeAll的情况下,如果view是UIScrollView或者其子类时,scrollView最顶部的内容在还未滚动时就会被navigationBar遮挡住,
如果同过设置edgesForExtendedLayout = UIRectEdgeNone,会发现虽然scrollView最顶部的内容出现在了navigationBar的下面,但是在往上滚动时,不能透过navigationBar看到滚动上去的视图,用这种方式并不是一个非常好的效果。
(实际上就是给view增加了内边距contentInset)
上面讨论的edgesForExtendedLayout属性是在navigationBar/tabBar为透明的情况下的(navigationBar/tabBar默认情况下是透明的)
然而在navigationBar/tabBar为不透明时,如果 edgesForExtendedLayout 为 UIRectEdgeAll,发现view并没有延伸到全屏,而是出现在navigationBar与tabBar之间(就像UIRectEdgeNone的效果一样)
此时设置 extendedLayoutIncludesOpaqueBars = YES
edgesForExtendedLayout延伸到全屏幕就有作用了