从iOS7开始,苹果默认App都是全屏App,意思就是:所有视图控制器的根view都以屏幕的左上角为该view的frame原点开始展示。
在iOS 7中,苹果引入了一个新的属性,叫做[UIViewController setEdgesForExtendedLayout:],它的默认值为UIRectEdgeAll。当你的容器是navigation controller时,默认的布局将从navigation bar的顶部开始。这就是为什么所有的UI元素都往上漂移了44pt。有时会加上顶部tool bar的高度 20, 20+44 = 64
ios默认viewController的View会延伸到最顶端,即使上面有导航条、状态栏,可以设置edgesForExtendedLayout属性
edgesForExtendedLayout是一个类型为UIExtendedEdge的属性,指定边缘要延伸的方向。
因为iOS7鼓励全屏布局,它的默认值很自然地是UIRectEdgeAll,四周边缘均延伸,就是说,如果即使视图中上有navigationBar,下有tabBar,那么视图仍会延伸覆盖到四周的区域。
这时候用到导航栏时,往往会出现该view被导航栏挡住情况。
最明显的是用到UITableView时,第一行单元格的数据会被UINavigationBar遮挡。
ios7,为了达到全屏效果的app,官方增加了几个属性:
1 @property(nonatomic,assign) UIRectEdge edgesForExtendedLayout NS_AVAILABLE_IOS(7_0); // Defaults to UIRectEdgeAll 2 @property(nonatomic,assign) BOOL extendedLayoutIncludesOpaqueBars NS_AVAILABLE_IOS(7_0); // Defaults to NO, but bars are translucent by default on 7_0. 3 @property(nonatomic,assign) BOOL automaticallyAdjustsScrollViewInsets NS_AVAILABLE_IOS(7_0); // Defaults to YES
属性edgesForExtendedLayout,意思是:边缘向四周延伸
edgesForExtendedLayout 值是结构体。默认值是UIRectEdgeAll,也就是上、下、左、右都延伸直到填充满整个屏幕
self.edgesForExtendedLayout = UIRectEdgeNone;// 1. UIRectEdgeNone:不要往四周边缘延伸 (即按照iOS7之前的传统来展示) ,设置完这一句,压入桟的控制器frame的y值就是从导航条下边缘开始。