swift - 将附件视图添加到“打开/保存”对话框时出现错误的布局约束
问题描述
我正在尝试添加一个NSView
带有复选框的简单视图作为附件视图NSOpenPanel
,但是当我运行我的程序时,我收到一条错误消息:The Open/Save panel was supplied an accessory view with bad layout constraints, resulting in a view that is zero [height/width].
Here are the constraints I've added to the view:
And here are the constraints for the checkbox :
这是创建的代码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 传递给子类的初始化程序,以使用其框架来设置附件视图的宽度。我在初始化程序中使用了硬编码值 40 作为此处未包含的高度。在使用这些约束设置附件视图后,警告停止出现,附件视图按期望/预期显示。
推荐阅读
- android - gradle中的依赖冲突
- linux - 仅修补和构建一个内核模块(Ubuntu 19)
- python-3.8 - 如何解决 Python 中的内存错误?
- amazon-web-services - AWS RDS 数据库创建限制
- r - 定义组,然后是子组
- python - 如何将 django-bootstrap-datepicker-plus TimePickerInput 与 am/pm 一起使用?
- c++ - 该函数的运行时效率如何提高?
- java - 滑动过渡以返回有效,但按下返回按钮不会返回
- dependencies - Zlib 未安装在 Cygwin 中 - Kaldi
- javascript - webpack 命令正在从 .ts 文件转换的 .js 文件底部添加长注释