Плохие ограничения макета при добавлении вспомогательного вида в диалог открытия / сохранения - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь добавить простой NSView с флажком в качестве вспомогательного представления к NSOpenPanel, но когда я запускаю свою программу, я получаю сообщение об ошибке "1003 *". Вот ограничения, которые я добавилна просмотр: 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
}

Кто-нибудь знает, что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 13 января 2019

Попробуйте настроить вид, подобный этому (Xcode 10.1).Сначала убедитесь, что в представлении AutoLayout выбрано , а не .Затем:

accessory view size inspector

Измените ширину и высоту вида на любое подходящее (я использую «маленький» размер элемента управления)

Установите флажок, подобный следующему:

accessory view control size inspector

Снова, при необходимости, отрегулируйте ширину и высоту.Не следует добавлять другие ограничения.

Обратите внимание, что если вы сохраните и повторно используете вспомогательное представление в нескольких вызовах panel.beginModalSheet (), вы получите предупреждение консоли, поскольку предыдущий beginModalSheet () добавил ограничения макета.

0 голосов
/ 01 января 2019

Я столкнулся с той же проблемой с похожим устройством, созданным в коде, и, наконец, решил его.Моя реализация обрабатывается в пользовательском подклассе NSView, который я затем добавляю как .accessoryView NSOpenPanel из контроллера представления, где я отображаю панель.

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 для высоты в инициализаторе, которая здесь не указана.После настройки вспомогательного представления с этими ограничениями предупреждения перестали появляться, и вспомогательное представление отображается в соответствии с пожеланиями / ожиданиями.

...