NSStackView仅显示最新的自定义视图

时间:2014-04-25 03:21:01

标签: objective-c macos cocoa nsstackview

我有一个自定义视图控制器类。我想实例化多个自定义视图控制器并将其视图添加到我的NSStackView。我通过单击按钮向堆栈视图添加新视图。该按钮调用此方法:

[stackView insertView:myCustomViewController.view atIndex:0 inGravity:NSStackViewGravityBottom];

然而,当添加新视图时,它会在前一个视图所在的位置下方添加stackView.spacing,但之前的视图不再可见,但是仍然会在我的底部引力中将其列为视图,如下所示我打电话给

NSLog(@"%lu",(unsigned long)[stackView viewsInGravity:NSStackViewGravityBottom].count);

如果我尝试添加NSButton s,我没有这个问题,所以这与我的自定义视图有关,但我无法弄清楚是什么。

请帮忙。谢谢!

1 个答案:

答案 0 :(得分:3)

您应该检查自定义视图是否具有完全定义视图高度的约束(或内部内容大小)。如果他们不这样做,这些视图会降低到0高度(之前我也发生了同样的事情)。

您可以通过以下方式检查是否发生了这种情况:

[stackView insertView:myCustomViewController.view atIndex:0 inGravity:NSStackViewGravityBottom];
[stackView layoutSubtreeIfNeeded];
NSLog(@"%f - %d", NSHeight(myCustomViewController.view.frame), [myCustomViewController.view hasAmbiguousLayout]);

<小时/> 使用StackView,您将看到后者打印&#34; 0 - 1&#34;。高度为0,并且它们不明确。

垂直NSStackView只会垂直定位视图,但不会给出特定的高度。 (水平堆栈视图和宽度相同)。