2013-07-21 50 views

回答

1

東西線viewA同時至少與viewBviewC一樣寬,然後使用兩個單獨的VFL語句@"H:[viewA(>=viewB)]"@"H:[viewA(>=viewC)]"

如果還希望確保A將不會比的viewB和/或viewC的最大寬度更寬,你定義一個可選的約束(即,比UILayoutPriorityRequired低優先級)爲viewA寬度等於一個他們,例如:

NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:viewA 
                   attribute:NSLayoutAttributeWidth 
                   relatedBy:NSLayoutRelationEqual 
                   toItem:viewB 
                   attribute:NSLayoutAttributeWidth 
                  multiplier:1.0 
                   constant:0.0]; 
constraint.priority = UILayoutPriorityDefaultLow; 
[viewA.superview addConstraint:constraint]; 

根據對priority的文檔:

如果約束「A == b」是可選的,基於約束的佈局系統將試圖減少「 ABS(A-B)」。

因此,如果viewBviewC大,這個可選的約束將被滿足並viewA將一樣寬viewB。如果viewB小於viewC,約束系統將滿足要求的@"H:[viewA(>=viewC)]"約束條件,但是隨後也將最小化abs(a-b),有效地使viewAviewC的寬度相同。

在實踐中,你可能並不需要此可選viewA==viewB約束,但如果你想確保viewA不會超過兩viewBviewC寬,再加入這最後可選的約束。

相關問題