Autolayout - 定义应更改哪个约束首先调整其大小

时间:2013-02-11 14:36:41

标签: constraints autolayout

我已经使用大于或等于和小于或等于定义了多个约束。当superview改变其大小时,iOS如何决定哪个视图会改变其大小?

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

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

1 个答案:

答案 0 :(得分:1)

NSLayoutConstraint的优先级告诉iOS& OS X约束首先满足。

如果您要首先展开展开viewOne,请应用可视格式@"H:[viewOne(==9999@499)]"的约束。这将告诉iOS,在所需的约束10≤viewOne≤20& 40≤viewTwo≤60符合viewOne,它应该尝试viewTwo 9,999像素宽,使其在NSNumber* maxWidthForViewOne = @(20) ; NSLayoutConstraint* constraint = [NSLayoutConstraint constraintsWithVisualFormat:@"H:[viewOne(==asBigAsPossible@499)]" options:0 metrics:@{@"asBigAsPossible":maxWidthForViewOne} views:views] [0] ; 之前展开。

如果您不想存储幻数9999,

viewOne

我在OS X中测试了这些,我发现499(NSLayoutPriorityWindowSizeStayPut - 1)是允许我通过调整窗口大小缩小{{1}}的最高优先级。由于您使用的是iOS,因此您需要测试优先级的行为。