我正在尝试添加一个简单的NSView
和一个复选框作为NSOpenPanel
的附件视图,但是当我运行我的程序时,我得到一个错误说The Open/Save panel was supplied an accessory view with bad layout constraints, resulting in a view that is zero [height/width].
这是我添加到视图中的约束:这里是复选框的约束:
这是创建NSOpenPanel
的代码:
let dlgOpenSounds: NSOpenPanel = NSOpenPanel()
let optionsView = BatchAddOptionsView()
dlgOpenSounds.accessoryView = optionsView
dlgOpenSounds.accessoryView?.awakeFromNib()
let result = dlgOpenSounds.runModal()
if result == .OK {
// do stuff
}
谁知道我做错了什么?
我遇到了同样的问题,在代码中创建了类似的安排,并最终解决了问题。我的实现是在一个自定义的NSView子类中处理的,然后我从视图控制器中添加NSOpenPanel的.accessoryView,在那里我显示面板。
private func setup() {
hiddenFilesCheckbox = NSButton(checkboxWithTitle: "Show Hidden Files", target: self, action: #selector(hiddenFilesCheckboxValueChanged))
guard let checkbox = hiddenFilesCheckbox else {
os_log("Hidden files checkbox is nil")
return
}
addSubview(checkbox)
checkbox.translatesAutoresizingMaskIntoConstraints = false
checkbox.leadingAnchor.constraint(equalTo: self.leadingAnchor, constant: 12).isActive = true
checkbox.topAnchor.constraint(equalTo: self.topAnchor, constant: 12).isActive = true
self.heightAnchor.constraint(greaterThanOrEqualToConstant: frame.height).isActive = true
self.widthAnchor.constraint(greaterThanOrEqualToConstant: frame.width).isActive = true
}
“hiddenFilesCheckbox”被声明为我的自定义NSView子类的属性。我玩了一些常量的其他硬编码值,但这些在我的测试中效果最好。我将openPanel传递给子类的初始化程序,以使用其框架来设置accessoryView的宽度。我在初始化程序中使用了硬编码值40作为高度,这里没有包含。在设置具有这些约束的附件视图后,警告停止出现,附件视图显示为所需/预期。