0

我用大于或等于和小于或等于定义了多个约束。当 superview 改变它的大小时,iOS 如何决定哪个视图将改变它的大小?

假设我有一个约束大于 10 和小于 20 的视图。我得到了约束大于 40 和小于 60 的第二个视图。

现在超级视图改变了它的大小,可用空间将增加 10 像素。我需要一种方法来定义允许首先调整哪个约束(并采用 10 像素)。

4

1 回答 1

1

NSLayoutConstraint 的优先级告诉 iOS 和 OS X 首先要满足哪些约束。

如果您有一个viewOne想要首先扩展的视图,请使用视觉格式应用约束@"H:[viewOne(==9999@499)]"。这将告诉 iOS,在满足所需的约束 10≤viewOne≤20&后40≤viewTwo≤60,它应该尝试使viewOne9,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,因此您需要测试您喜欢的优先级行为。

于 2013-02-11T21:02:35.843 回答