【问题标题】:Auto Layout Reversed Constraints in XCode 6.1XCode 6.1 中的自动布局反转约束
【发布时间】:2014-11-21 03:17:54
【问题描述】:

对于我和与我一起工作的其他人来说,这是一个持续存在的问题。

有人会期望以下两个约束都可以工作,因为它们本质上是相同的约束。

Sign Up的“end”和Login的“start”之间要间隔15点

听起来像

Login 的“开始”和 Sign Up 的“结束”应相隔 15 点。

然而,有时您必须反转约束才能使其发挥作用。

我应该提交雷达还是我们遗漏了什么?

这是在 XCode 6.1 上,但现在已经有一段时间了(不记得版本了)。

【问题讨论】:

  • 我做任何事情都是有约束的,我从来没有见过这个问题。您能否提供一个显示此问题的最小示例,并将其发布到某个地方?

标签: ios xcode autolayout nslayoutconstraint xcode6.1


【解决方案1】:

你错过了什么。

约束表示一个方程:

firstItem.firstAttribute == secondItem.secondAttribute * multiplier + constant

(等式也可以使用 = 代替 ==。)

交换项目属性项不会产生相同的等式。您必须否定常量才能保持含义。 (您还必须除以乘数。)

您的左侧截图意味着:

Sign Up.Trailing == Login.Leading * 1 + 15

您右侧的屏幕截图表示:

Login.Leading == Sign Up.Trailing * 1 + 15

从后面的两边减去 15 得到:

Login.Leading - 15 == Sign Up.Trailing * 1

将乘法除以 1:

Login.Leading - 15 == Sign Up.Trailing

交换两边:

Sign Up.Trailing == Login.Leading - 15

以标准约束形式重新表达:

Sign Up.Trailing == Login.Leading * 1 + (-15)

对比左侧:

 Left side: Sign Up.Trailing == Login.Leading * 1 + 15
Right side: Sign Up.Trailing == Login.Leading * 1 + (-15)

它们的含义不同。

换句话说,常数不仅仅是距离的大小,还有方向,所以符号很重要。例如,很有可能强制两个视图沿给定轴重叠。

【讨论】:

  • 好吧,这完全有道理。但有时在颠倒第一项和第二项时,XCode 确实将常量更改为“-constant”,而其他时候则不会!在任何情况下这应该是预期的行为?
  • 我不知道 Xcode 为什么/什么时候会这样做,什么时候不会。这可能与约束是否与画布的当前状态匹配有关。
【解决方案2】:

它们不一样,因为您的常数是 15。您需要将第二个约束中的常数更改为 -15。

【讨论】:

    猜你喜欢
    • 2016-04-07
    • 2018-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多