如何使用自动布局调整NSView以适应其子视图的所需大小?

时间:2012-01-27 14:13:14

标签: macos layout osx-lion nsview

我有三个子视图的超级视图。其中两个子视图在超视图中的大小和位置都是固定的,但第三个子视图的大小可能因内容而异。

我已经设置了自动布局约束来设置每个子视图的大小和位置,但我想要发生的是当第三个视图的内容发生变化时,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结构(即基于其子视图的大小),我使用宽度和高度值来调整常量

这并没有达到我的目的,因为它不会导致我的视​​图大小根据子视图的内在大小自动重新调整大小,但它确实给了我一个方法来重新手动调整大小。

0 个答案:

没有答案