edgesForExtendedLayout&& extendedLayoutIncludesOpaqueBars优先级

iOS7.0后UIViewController新增的布局相关属性,主要是为了方便全屏布局。

edgesForExtendedLayout:self.view能延伸到屏幕的方向

extendedLayoutIncludesOpaqueBars:延伸的布局是否包括bar,只在不透明的时候有作用

automaticallyAdjustsScrollViewInsets:是否给滑动视图添加insets

这里主要讨论一下这些属性和navigationBar.translucent一起使用的一个优先级。

1.优先级

先展示几张测试结果

1.self.edgesForExtendedLayout = UIRectEdgeNone下,navigationBar.translucent = YES/NO,extendedLayoutIncludesOpaqueBars = YES/NO,都会是以navigationBar左下为子视图起点,self.view.bounds.size会减去64高度。

1

2.self.edgesForExtendedLayout = UIRectEdgeAll(默认值),navigationBar.translucent = YES,extendedLayoutIncludesOpaqueBars = YES/NO;都会以左上为起点,self.view.bounds为全屏。

2

3.self.edgesForExtendedLayout = UIRectEdgeAll(默认值),navigationBar.translucent = NO,extendedLayoutIncludesOpaqueBars = YES时,会以左上为起点,self.view.bounds为全屏。

3

4.self.edgesForExtendedLayout = UIRectEdgeAll(默认值),navigationBar.translucent = NO,extendedLayoutIncludesOpaqueBars =NO时,会以navigationBar左下为子视图起点,self.view.bounds.size会减去64高度。

4

综上:优先级是先看edgesForExtendedLayout,再看navigationBar是否透明,在不透明的情况下才看extendedLayoutIncludesOpaqueBars。以上这几个属性是对被添加的子视图布局产生影响,达到的效果基本相同,但还是有细微的区别。而automaticallyAdjustsScrollViewInsets只是针对滑动视图(是做为第一个子视图)。而且只是对滑动视图里面的内容做调整,设置了ScrollView的Insets。滑动视图自己仍然受上面属性的影响。

结论:从这些属性的默认值来下看,都是尽量在维持self.view的全屏性,可能是因为在loadview里面默认是获取到的全屏布局的view,这个时候拿到frame.size是全屏的,一旦使用这个frame布局时,不一定是准确的,当有不透明的bars时,这个frame就没有减去bar的高度,只有在viewDidLayoutSubviews里面拿到的frame才是最终的。

以上纯粹个人理解,如果有不对或者更深理解的欢迎吐槽。

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

推荐阅读更多精彩内容

  • 先声明:以下总结只对ios7及ios7之后才有效~~~ 之前开发过程中偶尔会遇到设置导航栏透明与否或者运行系统版本...
    Qiu_W阅读 1,351评论 0 1
  • *7月8日上午 N:Block :跟一个函数块差不多,会对里面所有的内容的引用计数+1,想要解决就用__block...
    炙冰阅读 2,515评论 1 14
  • 明确一下以前一知半解的属性吧,文中所有的代码都默认写在UIViewController中,所以self特指控制器。...
    thinkq阅读 3,019评论 2 10
  • /* UIViewController is a generic controller base class th...
    DanDanC阅读 1,844评论 0 2
  • 文/贤锐(山西汾阳) 轻晃疏枝,慢打雕阑。无月时、偏是声喧。扬扬洒洒,缀缀连连。又晃开夜,敲开梦,打开烦。 还披鸯...
    祥鋭阅读 1,008评论 21 40