gpt4 book ai didi

swift - 以编程方式将 InterfaceBuilder 创建的 View 添加到 NSStackView 会将它们压缩到 0 高度

转载 作者:搜寻专家 更新时间:2023-11-01 07:19:57 25 4
gpt4 key购买 nike

我一直在尝试将我在 Interface Builder 中创建的自定义 View 添加到 NSStackView,但失败得很惨。

这是我的 View Controller 。它目前除了从 NIB 初始化 View 外什么都不做:

class ServiceControlViewController : NSViewController {
init() {
super.init(nibName: "ServiceControlView", bundle: nil)!
}
}

下面是我尝试将新创建的 View 添加到堆栈 View 的方式(这发生在应用程序委托(delegate)中):

@IBOutlet weak var stackView: NSStackView!

@IBAction func addButtonClicked(sender: AnyObject) {
let viewController = ServiceControlViewController()
stackView.addView(viewController.view, in: .top)
stackView.layoutSubtreeIfNeeded()
}

当我在将创建的 View 添加到堆栈 View 之前打印它的框架时,它具有正确的大小。如果我之后打印它,它会被压扁到零高度。我怀疑发生了一些我不明白的自动调整大小的魔法,但我无法修复它。

有趣的是,如果我将 ServiceControlViewController 的 View 设置为例如是一个 NSButton,那么它会被正确添加并且不会被压缩到零高度。它只发生在我创建的 Custom Views 中。

PS:我的 InterfaceBuilder 创建的 View 只包含一堆按钮和一个标签:

enter image description here

PPS:我添加了an MWE

最佳答案

似乎对该自定义 View 没有限制,使其大于零大小。您必须确定其大小调整行为是什么,例如它总是相同的大小,还是可以调整最小值等等。

然后在 IB 中,您可以构建创建该效果所需的约束。例如。: sample constraints

或者,您可以将这些控件放入堆栈 View 中以获得类似的结果。

关于swift - 以编程方式将 InterfaceBuilder 创建的 View 添加到 NSStackView 会将它们压缩到 0 高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39691494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com