为什么我的 NSWindow 在以编程方式创建时不会浮动在全屏应用程序之上? (Swift 5)

Why does my NSWindow not float above full screen apps when created programmatically? (Swift 5)

我正在尝试创建一个 NSWindow 并使 window 浮动在全屏应用程序之上。我已经使用下面概述的两种不同方法进行了尝试。

方法 1 - 故事板(有效)

我有一个故事板项目,其中包含一个 window 控制器。此 window 控制器在身份检查器中分配了以下 class。

class WindowController: NSWindowController {

    override func windowDidLoad() {
        super.windowDidLoad()
        guard let window = self.window else { return }

        // Enable full screen
        window.backgroundColor = .red
        window.level = NSWindow.Level(rawValue: Int(CGWindowLevelForKey(.mainMenuWindow)))
        window.styleMask = [.fullScreen]
        window.collectionBehavior = [.canJoinAllSpaces, .fullScreenAuxiliary]
    }

}

此方法没有任何问题,如 screenshot 中所示。但是,我更愿意以编程方式创建 NSWindow。

方法 2 - 以编程方式(不工作)

在这种方法中,我有以下 WindowController class:

class WindowController: NSWindowController {

    init() {
        super.init(window: NSWindow())
        guard let window = self.window else { return }
        setup(window: window)
    }

    func setup(window: NSWindow) {
        window.backgroundColor = .red
        window.level = NSWindow.Level(rawValue: Int(CGWindowLevelForKey(.mainMenuWindow)))
        window.styleMask = [.fullScreen]
        window.collectionBehavior = [.canJoinAllSpaces, .fullScreenAuxiliary]
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }
}

连同我的 appDelegate 中的以下内容:

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {

    let window = WindowController()

    func applicationDidFinishLaunching(_ aNotification: Notification) {
        window.showWindow(self)
    }

}

尽管这成功地创建了一个漂浮在 windowed 应用程序上方的 NSWindow,如 here 所示,NSWindow 拒绝漂浮在全屏应用程序上方。

从我尝试调试问题开始,在第二种方法中以编程方式创建 NSWindow 时,window.collectionBehavior = [.canJoinAllSpaces, .fullScreenAuxiliary] 似乎没有做任何事情。

我是 swift 的新手,所以对于第二种方法中为什么 NSWindow 没有浮动在全屏应用程序上方的任何帮助,我们将不胜感激!

版本:

7 个月后,我设法通过将 window 的 styleMask 更改为无边框

使其正常工作
window.styleMask = [.borderless]

迟到总比不迟到好...