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

Dou*_*ugC 7 macos layout nsview osx-lion

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

我已经设置了自动布局约束来设置每个子视图的大小和位置,但我想要发生的是当第三个视图的内容发生变化时,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];
Run Code Online (Sandbox Code Playgroud)

其中"viewWidth"和"viewHeight"是具有所需值的度量字典中的键.在udpateConstraints中,我可以分析我的视图的内容并执行此操作:

[sizeHeightConstraint setConstant: size.height];
[sizeWidthConstraint setConstant: size.width];
Run Code Online (Sandbox Code Playgroud)

设置新值,下一个布局将导致视图的大小调整.

更新panupan的问题更新:

以这种方式创建约束时,可以放入本质上是变量名称的内容.在这种情况下,这些名称是viewWidthviewHeight.它们被称为约束的常数.您还将称为度量的字典传递给[NSLayoutConstrating constraintsWithVisualFormat:...]调用,该调用为这些常量提供值.

因此,在这种情况下,我从视图的默认高度和宽度开始,作为度量字典键的值viewWidthviewHeight.稍后,我使用setConstant:方法更改这些值.在上面的示例中,size是我根据视图内容计算的CGSize结构(即基于其子视图的大小),我使用width和height值来调整常量.

这并没有达到我的目的,因为它不会导致我的视​​图大小根据子视图的内在大小自动重新调整大小,但它确实让我有办法手动重新调整大小.