将附件视图添加到“打开/保存”对话框时,布局约束不良

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将附件视图添加到“打开/保存”对话框时,布局约束不良相关的知识,希望对你有一定的参考价值。

我正在尝试添加一个简单的NSView和一个复选框作为NSOpenPanel的附件视图,但是当我运行我的程序时,我得到一个错误说The Open/Save panel was supplied an accessory view with bad layout constraints, resulting in a view that is zero [height/width].这是我添加到视图中的约束:constraints for NSView这里是复选框的约束:constraints for 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传递给子类的初始化程序,以使用其框架来设置accessoryView的宽度。我在初始化程序中使用了硬编码值40作为高度,这里没有包含。在设置具有这些约束的附件视图后,警告停止出现,附件视图显示为所需/预期。

另一答案

尝试设置这样的视图(Xcode 10.1)。首先确保未选中视图上的AutoLayout。然后:

accessory view size inspector

将视图宽度和高度更改为适当的值(我使用'小'控件大小)

设置类似于的复选框:

accessory view control size inspector

再次,根据需要调整宽度和高度。不应该添加其他约束。

请注意,如果在多个panel.beginModalSheet()调用中保存并重用附件视图,则会收到控制台警告,因为先前的beginModalSheet()添加了布局约束。

以上是关于将附件视图添加到“打开/保存”对话框时,布局约束不良的主要内容,如果未能解决你的问题,请参考以下文章

此视图不受垂直约束。在运行时它会跳到左边,除非你添加一个垂直约束

向添加到 UIWindow 的视图添加约束时,为啥无法设置自动布局约束?

尽管添加了自动布局约束,但 UIScrollView 不滚动

使用布局约束以编程方式将视图添加到滚动视图

如何使用自动布局(约束)将子视图添加到 UIPageViewController?

当我添加自动布局约束时,为啥我的 textview 不显示?