edgesForExtendedLayout是一个UIExtendedEdge类型的属性,指定边缘要延伸的方向。
从iOS 7开始,苹果鼓励全屏布局,苹果引入了一个新的属性,叫做[UIViewController setEdgesForExtendedLayout:],它的默认值为UIRectEdgeAll,四周边缘均延伸。当你的容器是navigation controller时,默认的布局将从navigation bar的顶部开始。这就是为什么所有的UI元素都往上漂移了44pt。
如果视图中上有navigationBar,下有tabBar,那么视图仍会延伸覆盖到四周的区域。
self.edgesForExtendedLayout = UIRectEdgeNone;
我们都知道默认的UINavigationBar是半透明的。如上设置了UIRectEdgeNone之后,你嵌在UIViewController里面的UITableView和UIScrollView就不会穿过UINavigationBar了,同时UIView的控件也回复到了iOS6时代。
不过这个对于Status Bar在iOS7上面的变化是无效的,正确的说应该是部分无效。在存在Navigation部分或者Tabbar部分的时候,上面的代码可以使得Status Bar也不载透明(有待验证,毕竟UIViewController的可用空间被控制了),但是在没有这两个部分的时候,Status Bar依旧是会记入UIView范围的。
参考资料:
http://blog.sina.com.cn/s/blog_6291e42d0101f6b0.html
http://blog.csdn.net/cny901111/article/details/26529949