我有三个子视图的超级视图。其中两个子视图在超视图中的大小和位置都是固定的,但第三个子视图的大小可能因内容而异。
我已经设置了自动布局约束来设置每个子视图的大小和位置,但我想要发生的是当第三个视图的内容发生变化时,superview应调整大小以便能够显示它完全。
我已经在子视图上实现了 - (NSSize)intrinsicContentSize,以便它返回它想要的大小,但是我无法弄清楚如何添加一个约束来触发superview调整大小。
有什么想法吗?
更新:
我通过在视图中添加约束来实现这一点:
sizeWidthConstraint = [[NSLayoutConstraint constraintsWithVisualFormat:@"H:[self(==viewWidth)]" options:0 metrics:metrics views:views] lastObject];
sizeHeightConstraint = [[NSLayoutConstraint constraintsWithVisualFormat:@"V:[self(==viewHeight)]" options:0 metrics:metrics views:views] lastObject];
其中“viewWidth”和“viewHeight”是具有所需值的度量字典中的键。在udpateConstraints中,我可以分析我的视图的内容并执行此操作:
[sizeHeightConstraint setConstant: size.height];
[sizeWidthConstraint setConstant: size.width];
设置新值,下一个布局将导致视图调整大小。
更新panupan的问题:
以这种方式创建约束时,可以输入本质上是变量名的内容。在这种情况下,这些名称是 viewWidth 和 viewHeight 。它们被称为约束的常数。您还将称为度量的字典传递给[NSLayoutConstrating constraintsWithVisualFormat:...]调用,该调用为这些常量提供值。
因此,在这种情况下,我开始使用我的视图的默认高度和宽度作为度量字典键 viewWidth 和 viewHeight 的值。稍后,我使用setConstant:方法更改这些值。在上面的例子中, size 是我根据视图内容计算的CGSize结构(即基于其子视图的大小),我使用宽度和高度值来调整常量
这并没有达到我的目的,因为它不会导致我的视图大小根据子视图的内在大小自动重新调整大小,但它确实给了我一个方法来重新手动调整大小。