Yosemite (+) Пользовательские кнопки NSWindow - PullRequest
0 голосов
/ 18 декабря 2018

В последних версиях XCode и Mac OS X кнопки окон - закрыть, свернуть и масштабировать перешли на виджеты тем, и их настройки окон должны - начиная с Yosemite, через NSTitlebarAccessoryViewController.

I'mпытаюсь перейти от пользовательских NSButtons - я использую суть из icodeforlove - WindowButtonBar.swift , которую я настроил для утилиты NSPanel - PanelButtonbar, которую я загружаю следующим образом в панеликонтроллер:

var hoverBar : PanelButtonBar?
var accessoryViewController : NSTitlebarAccessoryViewController?

override func windowDidLoad() {
    //  decide where to place the hover bar
    if let window = self.window, window.responds(to: #selector(NSWindow.addTitlebarAccessoryViewController(_:))) {
        guard self.accessoryViewController == nil else { return }
        let accessoryViewController = NSTitlebarAccessoryViewController()
        self.accessoryViewController = accessoryViewController
        hoverBar = PanelButtonBar.init(frame: NSMakeRect(0, 0, 80, 19))
        accessoryViewController.view = hoverBar!
        accessoryViewController.layoutAttribute = .left
        window.addTitlebarAccessoryViewController(accessoryViewController)
    }
    else
    {
        hoverBar = PanelButtonBar.init(frame: NSMakeRect(5, 3, 80, 19))
        self.titleView?.superview?.addSubview(hoverBar!)
    }

    //  we want our own hover bar of buttons (no mini, conditional zoom)
    //  but reuse the close widget's target action setup
    if let panelButton = hoverBar!.closeButton, let windowButton = window?.standardWindowButton(.closeButton) {
        panelButton.target = windowButton.target
        panelButton.action = windowButton.action
    }

    panel.standardWindowButton(.closeButton)?.removeFromSuperview()
}

, который загружается нормально, но пользовательский интерфейс выключен - слишком далеко вправо и слишком низко:

enter image description here

Похоже, что оригинальный виджет закрытия смещает панель наведения, которую я намеревался расположить .left для наложения, как и раньше, но ни скрытие, ни удаление виджета закрытия, похоже, не влияют на макет.

Возможно, я собираюсьвсе это неправильно, но я бы хотел, чтобы у меня было такое поведение, как раньше.

...