objective-c - NSStackView 只显示最新的自定义 View

标签 objective-c macos cocoa nsstackview

我有一个自定义 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/

相关文章:

objective-c - AudioQueue启动失败

javascript - 将银行识别号转换为帐号

python - libmysqlclient_r.18.dylib 与/usr/local/mysql/lib/MacOS 不同

objective-c - 工作表呈现后禁用关闭按钮

objective-c - 如何在 NSBrowser 中突出显示一行?

objective-c - 如何将文件拖放到 NSTextField 上?

iphone - 从存储在 NSArray 中的对象获取类/类型

ios - 将 UIVibrancyEffect 应用于 UITableViewCell 中的 UILabel

iphone - 如何在UiView中拖动UIBezierPath

python - mac上升级到python3.4后出现错误