Как получить уведомление, когда строка заголовка NSWindow становится видимой в полноэкранном режиме? - PullRequest
0 голосов
/ 02 марта 2019

При максимизации приложения MacOS до полноэкранного режима строка меню по умолчанию скрыта:

Hidden Title Bar

Однако, когда пользователь перемещает курсор наВ верхней части экрана строка меню снова появляется.Кроме того, в строке заголовка окна появляются цветные кнопки для изменения размера и закрытия окна:

Visible Title Bar

В моем случае (где окно titleVisibility установлен на hidden), это вызывает смещение кнопок панели инструментов.Чтобы предотвратить это (и позволить им сохранить свою позицию), мне нужно будет обновить макет панели инструментов во время анимации вставки.

К сожалению, я не смог найти какой-либо метод уведомления или делегата, который информируетконтроллер окна, когда строка меню и кнопки собираются скользить (и с какой анимацией).

Есть ли способ обнаружить это?

1 Ответ

0 голосов
/ 03 марта 2019

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

ОБНОВЛЕНИЕ: Я просто вижу, что оно работает только без панели инструментов.

var observer:NSObjectProtocol?

func windowDidEnterFullScreen(_ notification: Notification) {

    observer = notificationCenter.addObserver(forName: NSWindow.didChangeOcclusionStateNotification, object: nil, queue: OperationQueue.main) { (notification) in

        if let window = notification.object as? NSWindow{

            if window.occlusionState == NSWindow.OcclusionState.init(rawValue: 8194){
                print("window title visible")
            } else {
                print("window title hidden")
            }
        }
    }
}

func windowDidExitFullScreen(_ notification: Notification) {

    notificationCenter.removeObserver(observer as Any)

}
...