当更新到 iOS 8 SDK 时,我的应用程序中的一个屏幕完全崩溃了。 问题似乎是顶部布局指南向上移动,而不是成为其余 View 的“ anchor ”。
这是 iOS 7 上的 View :
这是它在 iOS 8 中的样子(从 Xcode 6 View Hierarchy 调试器捕获):
如您所见, View 显示在导航栏上方。 top layout guide 有两个约束,一个是针对上面的image view,一个是针对下面的white view。 底部布局指南没有限制,只有 View 的高度限制。
出于某种原因,iOS 8 决定将顶部布局指南推送到 {0 -255; 0 0}
在 [self.view layoutIfNeeded]
第一次被调用之后。
此外, View 的边界有时对于设备而言显得太大(即显示完全与统一 Storyboard (600x600) 中的一样,而不是 320x480/320x568。
iOS 8 中有哪些变化可能会搞砸布局?
[编辑] 以下是 View 约束的完整列表:
(lldb) po self.view.constraints
<__NSArrayM 0x786ac520>(
<NSLayoutConstraint:0x7c377bd0 V:[_UILayoutGuide:0x7c372f60]-(0)-[UIView:0x7c373120]>,
<NSLayoutConstraint:0x7c377c00 UIView:0x7c373120.width == UIView:0x7c3730b0.width>,
<NSLayoutConstraint:0x7c377c30 UIView:0x7c3730b0.centerX == UIView:0x7c373120.centerX>,
<NSLayoutConstraint:0x7c377c60 H:|-(0)-[UIView:0x7c3716f0] (Names: '|':UIView:0x7c3730b0 )>,
<NSLayoutConstraint:0x7c377c90 UIView:0x7c3716f0.width == UIView:0x7c3730b0.width>,
<NSLayoutConstraint:0x7c372f30 V:[_UILayoutGuide:0x7c372f60]-(129)-[UIView:0x7c3716f0]>
)
最佳答案
Extend Edges > Under Top Bars
在 Attribute Inspector 的 Extend Edges 部分默认选中。
尝试取消选中 Under Top Bars
。
当我遇到这种奇怪的行为时,这对我有很多帮助。
请注意这是一个 UIViewController 属性,因此您可以根据需要在代码中设置它。
关于iOS 8 top layout guide自动布局问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25964076/