如何在全屏模式下显示NSWindow的标题栏时收到通知?

问题描述 投票:0回答:1

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

Hidden Title Bar

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

Visible Title Bar

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

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

有没有办法检测到这个?

cocoa nswindow menubar nswindowcontroller
1个回答
1
投票

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

}
© www.soinside.com 2019 - 2024. All rights reserved.