例如,标签A,B和C。标签A的宽度应为B或C中较大的一个。

从视觉上看,

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

最佳答案

如果要确保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 的文档:



因此,如果viewB大于viewC,则将满足此可选约束,并且viewA的宽度将与viewB相同。如果viewB小于viewC,则约束系统将满足所需的@"H:[viewA(>=viewC)]"约束,但同时也将abs(a-b)最小化,从而有效地使viewAviewC的宽度相同。

实际上,您可能不需要此可选的viewA==viewB约束,但如果要确保viewA的宽度不超过viewBviewC的宽度,请添加此最终的可选约束。

关于ios - 如何添加约束以使一个 View 与其他两个 View 中的最大一样宽?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17776454/

10-11 17:24