1

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

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

但是,当添加一个新视图时,它会添加stackView.spacing到前一个视图所在的下方,但该前一个视图不再可见,但是它仍然在我的底部重力中列为一个视图,正如我调用时所证明的那样

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

如果我尝试添加 s,我没有这个问题NSButton,所以这与我的自定义视图有关,但我不知道是什么。

请帮忙。谢谢!

4

1 回答 1

4

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

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

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


使用 StackView,您会看到后面的打印“0 - 1”。高度为 0,它们是模棱两可的。

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

于 2014-04-30T03:39:14.203 回答