【问题标题】:Unexpected result for autolayout on iphone 6 plusiphone 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 点。您无法更改这些边距。

【问题讨论】:

    标签: ios autolayout iphone-6-plus


    【解决方案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 个以上模拟器的错误。

        【讨论】:

          猜你喜欢
          • 2015-09-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-03-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多