2014-11-21 92 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。