iphone 6 plus 上自动布局的意外结果

Posted

技术标签:

【中文标题】iphone 6 plus 上自动布局的意外结果【英文标题】:Unexpected result for autolayout on iphone 6 plus 【发布时间】:2014-09-22 10:52:16 【问题描述】:

我在视图控制器(VC)上添加了一个 uiview,试图设置它的宽度等于 VC 的视图宽度。

我设定和期望的:

我在 iphone 6 plus 上得到了什么:

我尝试更改前导空格和尾随空格的常量,但没有任何帮助。 iphone 6+ 自动布局有什么特别之处吗?

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

--------2016 年 12 月添加 对于像我这样被这个案子弄糊涂的人: UIView中有一个layout margin属性,就是一个UIEdgeInsets(8,8,8,8)。它类似于 css 填充。

当你的视图的边缘接近父视图的边缘并且preservesSuperviewLayoutMargins 属性为真时,实际的布局边距可能会增加以防止内容与父视图的边距重叠。

默认边距是每边八点。

如果视图是视图控制器的根视图,系统会设置和 管理边距。顶部和底部边距设置为零 点。侧边距因当前尺寸等级而异,但 可以是 16 或 20 点。您无法更改这些边距。

【问题讨论】:

【参考方案1】:

添加约束时尽量去掉对边距的勾选。这里看看:

检查对边距的约束及其结果

现在,在移除约束并重新添加约束且未选中 Constrain to margins 后,结果如下:

【讨论】:

感谢您节省了我的时间。 我也经历过这几次。看起来像一个 xcode 错误? 我不会说这是一个错误,很可能 iphone 6 plus 的利润率高于其他 iphone。 是否有任何 Apple 文档/资源可以解释他们如何计算每台设备的边距? @EnricoSusatyo 不,没有文件可以解释他们如何计算设备的边距。甚至没有备忘单对此有任何详细信息。【参考方案2】:

Sharon 的回答效果很好,但您不必删除现有的约束来解决问题。您可以编辑现有的约束来移除多余的边距:

【讨论】:

我也有同样的问题。你是如何添加水平空间约束的? 您熟悉创建自动布局约束吗?只需创建常规约束并取消选中“相对于边距”选项即可。 @4thSpace : 当你取消选中页边距时,它会自动从前导约束变为水平约束。【参考方案3】:

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

【讨论】:

【参考方案4】:

我的“完成”按钮遇到了同样的问题。问题是我的视图(完成按钮)位于基本视图层次结构中,所以我将视图带回根视图(视图控制器的视图)。并相应地设置约束。

我的案例设置约束 Pin-> 取消选中 Constraints to Margin -> Bottom,Leading,Trailing (Constraints value=0)

确保视图层次结构不应该遵循这种方式。(子视图可能是但剪切视图不能)。

【讨论】:

【参考方案5】:

我在 iPhone 6 plus 模拟器中遇到了这个错误。但是在 6 plus 设备中,这个错误并没有发生。这可能只是 6 个以上模拟器的错误。

【讨论】:

以上是关于iphone 6 plus 上自动布局的意外结果的主要内容,如果未能解决你的问题,请参考以下文章

Swift Xcode 自动布局约束仅针对 iphone 6 plus 和 ipad

iPhone 6 Plus 支持字体问题

更新为 iPhone 5 制作的 XIB 以与 iPhone 6 和 iPhone 6 Plus 一起使用

我在 Xcode 的自动布局部分的底部没有看到 iPhone 6、6S 尺寸来调整我的视图。我只看到 4s、SE、7 和 7 Plus 尺寸

iphone 6 plus 上具有 600x600 pt 框架的 UIViews 以及大小类

自动布局不适用于 Plus 型号