iOS 7以后在ViewController里面引进了一系列属性用于管理页面布局。
在iOS7后,View的布局是默认全屏的,Navigation Bar默认是半透明的,于是在Navigation Bar下面可以看到底部View视图的背景颜色如图1 。
但是 如果将属性 edgesForExtendedLayout设置成UIRectEdgeNone,表明View是不要扩展到整个屏幕的。页面效果如图2:
对于 automaticallyAdjustsScrollViewInsets 这个属性用于如果页面是ScrollView或者UITableView,通常我们希望ScrollView或者UITableView内容显示是在UINavigation Bar下面。
通过设置edgesForExtendedLayout = UIRectEdgeNone或者self.navigationController.navigationBar.translucent = NO;可以让view的布局从UINavigation Bar下面开始,不过一个副作用就是当页面滑动的时候,view是没有办法占据全屏的。
automaticallyAdjustsScrollViewInsets就可以很好的完成这个需求。可以设置self.automaticallyAdjustsScrollViewInsets = NO;来解决这个问题
另外 若果你的状态栏是半透明的,现在想改为不透明的UI,而布局使用的不包括状态栏的frame 则可以这样设置 self.extendedLayoutIncludesOpaqueBars = YES;// 修改 translucent =NO后对frame的影响。