自动布局 - 定义应该改变哪个约束首先调整它的大小

Posted

技术标签:

【中文标题】自动布局 - 定义应该改变哪个约束首先调整它的大小【英文标题】:Autolayout - Define which constraint should change adjust it's size first 【发布时间】:2013-02-11 14:36:40 【问题描述】:

我用大于或等于和小于或等于定义了多个约束。当superview改变大小时,ios如何决定哪个view改变大小?

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

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

【问题讨论】:

【参考方案1】:

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

如果您想先扩展视图 viewOne,请应用视觉格式 @"H:[viewOne(==9999@499)]" 的约束。这将告诉 iOS,在满足所需的约束 10≤viewOne≤2040≤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,因此您需要测试您喜欢的优先级。

【讨论】:

以上是关于自动布局 - 定义应该改变哪个约束首先调整它的大小的主要内容,如果未能解决你的问题,请参考以下文章

iOS 自动布局 >> 视图没有改变它的大小

动态调整视图大小(拖动运动)时自动布局约束中断

通过文本字段上的自动布局调整字体大小并改变高度

自动布局和设置约束正在改变我的应用程序中按钮的大小

使用自动布局时标签不会调整大小,情节提要中的约束

Cocoa 自动布局和调整子视图的大小