我用大于或等于和小于或等于定义了多个约束。当 superview 改变它的大小时,iOS 如何决定哪个视图将改变它的大小?
假设我有一个约束大于 10 和小于 20 的视图。我得到了约束大于 40 和小于 60 的第二个视图。
现在超级视图改变了它的大小,可用空间将增加 10 像素。我需要一种方法来定义允许首先调整哪个约束(并采用 10 像素)。
我用大于或等于和小于或等于定义了多个约束。当 superview 改变它的大小时,iOS 如何决定哪个视图将改变它的大小?
假设我有一个约束大于 10 和小于 20 的视图。我得到了约束大于 40 和小于 60 的第二个视图。
现在超级视图改变了它的大小,可用空间将增加 10 像素。我需要一种方法来定义允许首先调整哪个约束(并采用 10 像素)。
NSLayoutConstraint 的优先级告诉 iOS 和 OS X 首先要满足哪些约束。
如果您有一个viewOne
想要首先扩展的视图,请使用视觉格式应用约束@"H:[viewOne(==9999@499)]"
。这将告诉 iOS,在满足所需的约束 10≤viewOne≤20
&后40≤viewTwo≤60
,它应该尝试使viewOne
9,999 像素宽,使其在viewTwo
.
如果您不想存储幻数 9999,
NSNumber* maxWidthForViewOne = @(20) ;
NSLayoutConstraint* constraint = [NSLayoutConstraint constraintsWithVisualFormat:@"H:[viewOne(==asBigAsPossible@499)]" options:0 metrics:@{@"asBigAsPossible":maxWidthForViewOne} views:views] [0] ;
我在 OS X 中测试了这些,我发现 499 (NSLayoutPriorityWindowSizeStayPut - 1) 是允许我viewOne
通过调整窗口大小来缩小的最高优先级。由于您使用的是 iOS,因此您需要测试您喜欢的优先级行为。