edgesForExtendedLayout、automaticallyAdjustsScrollViewInsets及extendedLayoutIncludesOpaqueBars的使用

前言

从iOS7开始,UIViewController默认使用全屏布局,并增加了edgesForExtendedLayout、automaticallyAdjustsScrollViewInsets及extendedLayoutIncludesOpaqueBars这三个属性用于控制布局

edgesForExtendedLayout

该属性能够使控制器的view向四周延伸,直到view占据整个屏幕。该属性默认值为UIRectEdgeAll(向四周延伸),如果设为UIRectEdgeNone(不延伸),view就会从navigationBar的底部开始到tabBar上边结束。


UIRectEdgeAll01(view的尺寸等于屏幕的大小)

UIRectEdgeAll 02(透过navigationBar和tabBar可以看到红色)

由上图可以看出,view确实是铺满了整个屏幕

UIRectEdgeNone01(viewDidLoad中view的尺寸等于屏幕,而在快要显示时变短了)

UIRectEdgeNone02(不能透过navigationBar和tabBar看到view)

由上图可以看出,在UIRectEdgeNone下,最终view会显示在navigationBar和tabBar之间,但是在设置edgesForExtendedLayout为UIRectEdgeNone时,view的frame并不是立即就修改了,而是在viewDidLoad方法后系统会根据多重约束关系来重新设置view的frame,这也证明在viewDidLoad方法中拿到的view的frame并不一定是准确的

automaticallyAdjustsScrollViewInsets

这个属性常用于当控制器view为UIScrollView或者其子类(如UITableView)时。在edgesForExtendedLayout = UIRectEdgeAll的情况下,如果view是UIScrollView或者其子类时,scrollView最顶部的内容在还未滚动时就会被navigationBar遮挡住,如下图所示

tableView顶部内容被遮挡

如果同过设置edgesForExtendedLayout = UIRectEdgeNone,会发现虽然scrollView最顶部的内容出现在了navigationBar的下面,但是在往上滚动时,不能透过navigationBar看到滚动上去的视图,用这种方式并不是一个非常好的效果。
UIRectEdgeNone滚动前

UIRectEdgeNone滚动后

automaticallyAdjustsScrollViewInsets应运而生,当它为YES时(默认就是YES,上面为了测试效果故意设置其为NO),它可以使scrollView最顶部内容出现在navigationBar下面,并且在往上滚动时能够透过navigationBar看到滚动上去的view的内容(实际上就是给view增加了内边距contentInset)
automaticallyAdjustsScrollViewInsets=YES滚动前

automaticallyAdjustsScrollViewInsets=YES滚动后

tableView的contentInset被改变了

extendedLayoutIncludesOpaqueBars

该属性默认为NO,我们上面讨论的edgesForExtendedLayout属性是在navigationBar/tabBar为透明的情况下的(navigationBar/tabBar默认情况下是透明的),然而在navigationBar/tabBar为不透明时,如果edgesForExtendedLayout 为 UIRectEdgeAll,发现view并没有延伸到全屏,而是出现在navigationBar与tabBar之间(就像UIRectEdgeNone的效果一样),如下图所示


view的尺寸不等于屏幕尺寸

绿色块完全显示,view处于navigationBar和tabBar之间

此时设置extendedLayoutIncludesOpaqueBars = YES,效果如下图


view尺寸等于屏幕尺寸

绿色块只显示了一部分,另外一部分被navigationBar遮挡了
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容