2014-11-21 45 views
1

对于我和我一起工作的其他人来说,这一直是一个持续的问题。XCode 6.1中的自动布局反转约束

有人会认为以下两个限制都会起作用,因为它们实质上是相同的约束条件。

的“结束”的注册和“开始”的登录应该由15分

分开听起来一样

的登录的“开始”和符号“结束”应该做到相隔15分。

但是,有时您必须反转约束才能使其工作。

我应该提交一个雷达还是我们错过了一些东西?

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

enter image description here

+0

我尽一切努力,我从来没有见过这个问题。你能否提供一个显示这个问题的简单例子,并将其发布到某个地方? – rdelmar 2014-11-21 03:41:59

回答

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) 

它们的意思不同的东西。换句话说,常数不仅仅是距离的大小,也是方向,所以签名很重要。例如,强制两个视图沿给定轴重叠是非常可能的。

+0

好吧,完全合理。但有时在倒转第一个和第二个项目时,XCode会将常量更改为“恒定”,而有些时候则不会!有没有这种情况应该是预期的行为? – joakim 2014-11-21 11:07:04

+0

我不知道为什么/当Xcode会这样做,什么时候不会。它可能与约束是否匹配画布的当前状态有关。 – 2014-11-21 20:51:44

0

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