我有一个自定义视图控制器类。我想实例化多个自定义视图控制器并将其视图添加到我的NSStackView。我通过单击按钮向堆栈视图添加新视图。该按钮调用此方法:
[stackView insertView:myCustomViewController.view atIndex:0 inGravity:NSStackViewGravityBottom];
然而,当添加新视图时,它会在前一个视图所在的位置下方添加stackView.spacing
,但之前的视图不再可见,但是仍然会在我的底部引力中将其列为视图,如下所示我打电话给
NSLog(@"%lu",(unsigned long)[stackView viewsInGravity:NSStackViewGravityBottom].count);
如果我尝试添加NSButton
s,我没有这个问题,所以这与我的自定义视图有关,但我无法弄清楚是什么。
请帮忙。谢谢!
答案 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只会垂直定位视图,但不会给出特定的高度。 (水平堆栈视图和宽度相同)。