自动布局在XCode 6.1中反转约束

时间:2014-11-21 03:17:55

标签: ios xcode autolayout nslayoutconstraint xcode6.1

对于我和与我合作的其他人来说,这一直是一个问题。

有人会认为以下两个约束都有效,因为它们本质上是相同的约束。

"结束"注册和"开始"登录名应分为15分

听起来与

相同

"开始"登录和"结束"注册应分为15分。

然而,有时您必须反转约束才能使其有效。

我应该提交雷达还是丢失了什么东西?

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

enter image description here

2 个答案:

答案 0 :(得分:3)

你错过了什么。

约束表达了一个等式:

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)

它们意味着不同的东西。

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

答案 1 :(得分:0)

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