例如,标签A,B和C.标签A的宽度应该更宽,B或C.
视觉上,
的内容@"H:[viewA(==MAX(viewB,viewC))]"
答案 0 :(得分:1)
如果您想确保viewA
同时至少与viewB
和viewC
一样宽,那么请使用两个单独的VFL语句,@"H:[viewA(>=viewB)]"
和{{1 }}
如果您还想确保A不会超过@"H:[viewA(>=viewC)]"
和/或viewB
的最大宽度,您可以定义一个可选约束(即优先级低于viewC
)UILayoutPriorityRequired
的宽度等于其中之一,例如:
viewA
根据priority
的文档:
如果约束'a == b'是可选的,基于约束的布局系统将尝试最小化'abs(a-b)'。
因此,如果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];
大于viewB
,则会满足此可选约束,viewC
将与viewA
一样宽。如果viewB
小于viewB
,则约束系统将满足所需的viewC
约束,但也会最小化@"H:[viewA(>=viewC)]"
,从而有效地使abs(a-b)
相同宽度为viewA
。
实际上,您可能不需要这个可选的viewC
约束,但是如果您想确保viewA==viewB
不会比viewA
和{{1}更宽然后添加这个最终的可选约束。