【问题标题】:Interface Builder - Constraint maximum width and marginsInterface Builder - 限制最大宽度和边距
【发布时间】:2017-05-29 23:27:46
【问题描述】:

我有一个约束错误,

我想要做的是“使视图居中,视图上有 20 个边距,最大宽度为 320”

因此在 iPad 上视图不会被拉伸,但在较小的设备上,视图的宽度可以小于 320,并且有 20 pts 的边距。

但是使用这些规则会给我一个错误,可能是因为我说边距可以 >= 20,宽度

我尝试使用优先级,但我不确定它是如何工作的,而且我什么也得不到。

如何仅使用一个视图及其约束来达到预期的效果?

【问题讨论】:

  • 将前导/尾随约束更改为 = 20 并将它们的优先级设置为 999,以便它们可以在更广泛的设备上被打破
  • 您已经说过“将其水平居中”,因此不需要前导约束和尾随约束。
  • @Paulw11 很酷,这就是诀窍!将其发布为答案,以便我接受。
  • @matt 是的,但是我希望它水平对齐,但有边距。还是有像“拉伸到父级但有边距”这样的约束?

标签: ios xcode autolayout interface-builder constraints


【解决方案1】:

像这样:

请注意,(1)我们不需要尾随边距约束,因为我们已经水平居中,并且(2)320 的宽度具有较低的优先级,因此给不等式前导边距约束提供了一些目标有疑问,但不干涉。

这就是 iPhone 4s 纵向显示的样子:我们受到侧边距的限制:

这就是 iPhone 4s 在横向模式下的样子(当然还有比这更宽的):我们扩大了宽度,但最多只能达到 320:

【讨论】:

  • 请注意leadingMargin 不与父视图的左边缘齐平。如果 htafoya 想要正好 20 点的边距,则该约束将需要更改为仅使用 leading
  • @robmayoff 同意。我不太明白他说的边距是什么意思。在他的屏幕截图中,他被固定在超级视图的边缘,而不是边缘。但我不知道他是否意识到这最终意味着什么。所以我回答的重点是说明所需的概念,但当然要处理确切的数字取决于 OP。
  • 嗯,我设置了与您相同的约束,但边距始终为 20,因此当我扩展到 iPad 时,视图扩展为每边仅填充 20 点。 Paulw11 给出了我正在寻找的约束。
  • 抱歉我的定义,我说的是 Margin,因为这是 Android 布局中的概念,我相信 CSS 也是如此。
  • @htafoya 我对您接受 Paulw11 的回答没有任何问题;他是第一个,无论如何这是你的权利。但是你错了,我的解决方案不起作用。如果它对你不起作用,那么你就没有按照我说的去做。如果您愿意,我可以向您发送一个工作示例。基本上 Paulw11 的答案和我的完全等价;要解决冲突,只需将一个约束条件或另一个约束条件设为缩减属性的相等性即可。他选了一个,我选了另一个。如果您不理解这一点,则说明您还没有理解任何一种解决方案。
【解决方案2】:

正如您所推断的,自动布局需要知道在发生冲突时它应该打破哪个约束,这是由优先级完成的。但是,您还有另一个冲突,因为前导/尾随和宽度约束都是相对的。这意味着自动布局无法确定视图的宽度。

将前导/尾随约束更改为 = 20,并将它们的优先级设置为 999,以便它们可以在更宽的设备上被打破。这将允许确定宽度并消除您的冲突。

【讨论】:

    猜你喜欢
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多