例如,標籤A,B和C標記物A應該有寬度取的是更寬,B或C.如何添加一個約束,以使視圖與最寬的其他視圖一樣寬?
視覺上,沿着如果你想確保
@"H:[viewA(==MAX(viewB,viewC))]"
例如,標籤A,B和C標記物A應該有寬度取的是更寬,B或C.如何添加一個約束,以使視圖與最寬的其他視圖一樣寬?
視覺上,沿着如果你想確保
@"H:[viewA(==MAX(viewB,viewC))]"
東西線viewA
同時至少與viewB
和viewC
一樣寬,然後使用兩個單獨的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)」。
因此,如果viewB
比viewC
大,這個可選的約束將被滿足並viewA
將一樣寬viewB
。如果viewB
小於viewC
,約束系統將滿足要求的@"H:[viewA(>=viewC)]"
約束條件,但是隨後也將最小化abs(a-b)
,有效地使viewA
與viewC
的寬度相同。
在實踐中,你可能並不需要此可選viewA==viewB
約束,但如果你想確保viewA
不會超過兩viewB
和viewC
寬,再加入這最後可選的約束。
[Autolay高度等於MAX(多視圖高度)]的可能重複](http://stackoverflow.com/questions/17117799/autolayout-height-equal-to-maxmultiple-view-heights) –