【问题标题】:Autolayout: why are these same constrains different?自动布局:为什么这些相同的约束不同?
【发布时间】:2014-10-02 15:38:12
【问题描述】:

我正在学习自动布局。我目前正在添加一个简单的约束:视图与其父视图之间的 0px 边距。

显然,有两种方法可以添加这个约束:

首先,点击你的xib编辑器的右下方按钮,选择左边距并点击添加n个约束,如给定的截图:

这是第一个约束属性。它有 16px 的固定边距:

第二种方式,在Xcode菜单中选择:Editor > Pin >leading space to superview:

现在,我的约束是 0px,但它也有效:视图根据其父视图很好地适应

这是我的第二个约束属性:

第一个问题:为什么我的第一个约束左右边距是16px?我正在做一个全新的项目!如果我设置为 0px,我的视图周围会有一些额外的空间!

第二个问题:这两个约束有什么区别?最好的方法是什么?

谢谢

【问题讨论】:

    标签: ios autolayout


    【解决方案1】:

    你已经给出了答案。对 superview 的约束与对 superview 边距的约束不同。

    如果您考虑如何在代码中形成这些约束,这可能是最简单的。以下是您可以使用的属性:

    https://developer.apple.com/Library/ios/documentation/AppKit/Reference/NSLayoutConstraint_Class/index.html#//apple_ref/c/tdef/NSLayoutAttribute

    如您所见,RightMargin 和 RightMargin 都有。将子视图的右边缘固定到其父视图的 Right 与将其固定到其父视图的 RightMargin 不同。

    【讨论】:

    • 我仍然想知道为什么这两个菜单项有不同的行为以及为什么 16px...
    • 因为默认情况下视图控制器视图的左右边距 16px。但如果你愿意,当然可以改变它。
    • 他们没有“不同的行为”。 Superview 表示superview,而不是margin。但是在您的第一个屏幕截图中,您选中了“边距”复选框,所以现在您固定在边距上。只要看看你面前的东西。您需要知道的一切都在您提供的屏幕截图中。
    • 当然,目的不是用 -16 常量固定到 16 点边距,而是用 zero 固定到 16 点边距常量 - 从而在子视图周围提供一个很好的边距。这就是保证金的用途,即提供,呃,保证金。如果您要使用 -16 常量取消 16 点边距,最好从一开始就固定到边缘,而不是边距 - 特别是因为边距可以改变(实际上,你应该期望它这样做)。
    • 埃尔夫。你是对的,没有看到预先选中的复选框。如果我取消选中它,默认值将变为 0px。这是有道理的。
    猜你喜欢
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多