iPhone 6 Plus自动布局出现意外结果

27

我在视图控制器(VC)中添加了一个UIVIew,试图将其宽度设置为与VC视图的宽度相等。

我的设置和期望效果如下: xcode setting and expected result

而在iPhone 6 Plus上的实际效果如下: what i got on ip6+

我已尝试更改前导空间和后续空间的常量,但没有帮助。 iPhone 6+自动布局有什么特殊之处吗?

这里的视图设置是“任意宽度x普通高度”

------- 添加于2016年12月 对于像我一样困惑于此案例的人们: UIView中有一个layout margin属性,它是一个UIEdgeInsets(8,8,8,8)。它类似于CSS padding。

当视图的边缘靠近父视图的边缘且preservesSuperviewLayoutMargins属性为true时,实际布局边距可能会增加以防止内容重叠父视图的边距。默认边距为每个边8个点。如果视图是视图控制器的根视图,则系统设置和管理边距。顶部和底部边距设置为零点。侧边距因当前大小类而异,但可以是16或20个点。您无法更改这些边距。
5个回答

53

尝试在添加约束时取消勾选限制到边缘的选项。看一下这里:

勾选了“限制到边缘”的结果如下

限制到边缘 结果

现在,移除约束并重新添加没有勾选“限制到边缘”的约束,结果如下:

未勾选限制到边缘 无限制到边缘的结果


2
感谢您节省了我的时间。 - Horst
我也遇到过这个问题几次。看起来像是Xcode的一个bug? - syshen
我不会说这是一个错误,很可能是因为iPhone 6 Plus的利润比其他iPhone高。 - Jerome Diaz
有没有苹果的文档或资源可以解释他们如何计算每个设备的边距? - Enrico Susatyo
@SharonNathaniel 当我取消选中那个框时,它会自动重新选中。有任何想法为什么会发生这种情况吗? - Priyatham51
显示剩余3条评论

19

Sharon的答案非常有效,但您不必删除现有约束条件来解决问题。您可以编辑现有约束条件并删除多余的边距:

应用解决方案之前 解决步骤 应用解决方案之后


我也遇到了同样的问题。你是如何添加水平间距约束的? - 4thSpace
你是否熟悉创建自动布局约束?只需要创建一个常规约束并取消选中“相对于边距”选项即可。 - pimguilherme
@4thSpace:当您取消勾选边距时,它会自动从前导约束更改为水平约束。 - Mike Burba

0

编辑现有约束以删除多余的边距不起作用。您必须删除现有约束并添加新约束,保持未选择到边距的约束。


0
我遇到了与我的“完成”按钮相同的问题。问题是我的视图(Done Button)在基本视图层次结构中,因此我将视图带回根视图(视图控制器的视图)并相应地设置约束。
我的情况下,设置约束 Pin->取消选择边距约束->底部、前导和尾随(约束值=0)。

enter image description here

确保视图层次结构不应该是这样的。(子视图可能是,但裁剪视图不应该)。

enter image description here


-1

我在 iPhone 6 Plus 模拟器中遇到了这个 bug。但在实际的 6 Plus 设备上,这个 bug 并没有出现。这可能只是 6 Plus 模拟器的一个 bug。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接