對於我和我一起工作的其他人來說,這一直是一個持續的問題。XCode 6.1中的自動佈局反轉約束
有人會認爲以下兩個限制都會起作用,因爲它們實質上是相同的約束條件。
的「結束」的註冊和「開始」的登錄應該由15分
分開聽起來一樣
的登錄的「開始」和符號「結束」應該做到相隔15分。
但是,有時您必須反轉約束才能使其工作。
我應該提交一個雷達還是我們錯過了一些東西?
這是在XCode 6.1上,但現在已經有一段時間了(不記得版本)。
對於我和我一起工作的其他人來說,這一直是一個持續的問題。XCode 6.1中的自動佈局反轉約束
有人會認爲以下兩個限制都會起作用,因爲它們實質上是相同的約束條件。
的「結束」的註冊和「開始」的登錄應該由15分
分開聽起來一樣
的登錄的「開始」和符號「結束」應該做到相隔15分。
但是,有時您必須反轉約束才能使其工作。
我應該提交一個雷達還是我們錯過了一些東西?
這是在XCode 6.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會將常量更改爲「恆定」,而有些時候則不會!有沒有這種情況應該是預期的行爲? – joakim 2014-11-21 11:07:04
我不知道爲什麼/當Xcode會這樣做,什麼時候不會。它可能與約束是否匹配畫布的當前狀態有關。 – 2014-11-21 20:51:44
他們不一樣,因爲你的常數是15。您需要將第二個約束中的常量更改爲-15。
我盡一切努力,我從來沒有見過這個問題。你能否提供一個顯示這個問題的簡單例子,並將其發佈到某個地方? – rdelmar 2014-11-21 03:41:59