我认为即使 iOS 7 在一年多前推出,围绕这个布局问题仍然存在一些误解。所以我最终决定进一步阐述我的答案。
事情就是这样。
因为automaticallyAdjustsScrollViewInsets
' 默认值为YES
,所以一个非常简单的解决方案可能是添加以下代码:
if ([self respondsToSelector:@selector(setEdgesForExtendedLayout:)]) { // if iOS 7
self.edgesForExtendedLayout = UIRectEdgeNone; //layout adjustements
}
进入 ViewController 的-viewDidLoad
方法。
如果您想删除状态栏的怪癖(由于栏是半透明的,所以这并不奇怪)添加self.navigationController.navigationBar.translucent = NO
. 默认值为YES
。
注意:这与内容无关,因为半透明而与内容有关,但这是一个完全不同的故事!
因为extendedLayoutIncludesOpaqueBars
是NO
默认情况下,self.navigationController.navigationBar.translucent = NO
意味着基本上有
self.edgesForExtendedLayout = UIRectEdgeLeft | UIRectEdgeRight| UIRectEdgeBottom;
或者,更一般地说,类似的东西(就像给出一个想法的伪代码......)
BOOL enableTopEdge = extendedLayoutIncludesOpaqueBars && !navigationBarIsTranslucent
self.edgesForExtendedLayout = (enableTopEdge & UIRectEdgeTop) | UIRectEdgeLeft | UIRectEdgeRight | UIRectEdgeBottom;