当NSWindow的标题栏在全屏模式下可见时,如何获得通知?

时间:2019-03-02 16:57:07

标签: cocoa nswindow menubar nswindowcontroller

将macOS应用程序最大化为全屏模式时,默认情况下菜单栏为隐藏:

Hidden Title Bar

但是,当用户将光标移到屏幕顶部时,菜单栏会再次滑入。除此之外,窗口标题栏中还会显示用于调整窗口大小和关闭窗口的彩色按钮:

Visible Title Bar

在我的情况下(窗口的titleVisibility设置为hidden),这会导致工具栏按钮移动。为了防止这种情况发生(并让他们保持位置),我需要在插入动画期间更新工具栏的布局。

不幸的是,当菜单栏和按钮即将滑入(以及带有哪个动画)时,我找不到任何通知窗口控制器的通知或委托方法。

有没有办法检测到这一点?

1 个答案:

答案 0 :(得分:0)

这是我找到的最好的解决方案,以及如何在应用程序中使用它。 将其添加到您的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)

}