如何添加约束以使视图与最宽的其他两个视图一样宽?

时间:2013-07-21 20:12:42

标签: ios cocoa-touch uiview autolayout

例如,标签A,B和C.标签A的宽度应该更宽,B或C.

视觉上,

的内容
@"H:[viewA(==MAX(viewB,viewC))]"

1 个答案:

答案 0 :(得分:1)

如果您想确保viewA同时至少与viewBviewC一样宽,那么请使用两个单独的VFL语句,@"H:[viewA(>=viewB)]"和{{1 }}

如果您还想确保A不会超过@"H:[viewA(>=viewC)]"和/或viewB的最大宽度,您可以定义一个可选约束(即优先级低于viewCUILayoutPriorityRequired的宽度等于其中之一,例如:

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}更宽然后添加这个最终的可选约束。