我有一个自定义视图控制器类。我想实例化多个自定义视图控制器,并将它们的视图添加到我的NSStackView中。单击按钮将新视图添加到堆栈视图。该按钮调用此方法:
[stackView insertView:myCustomViewController.view atIndex:0 inGravity:NSStackViewGravityBottom];
但是,当添加新视图时,它在前一个视图的下方添加了
stackView.spacing
,但是该前一个视图不再可见,但是仍然作为底部视图列出,如我调用时所证明的那样。NSLog(@"%lu",(unsigned long)[stackView viewsInGravity:NSStackViewGravityBottom].count);
如果尝试添加
NSButton
,我没有这个问题,所以这与我的自定义视图有关,但我不知道是什么。请帮忙。谢谢!
最佳答案
您应该检查您的自定义视图是否具有完全定义视图高度的约束(或固有内容大小)。如果不这样做,这些视图就会崩溃到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只会将视图垂直放置,而不会给出特定的高度。 (对于水平堆栈视图和宽度相同)。
关于objective-c - NSStackView仅显示最新的自定义 View ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23283594/