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