为什么我的 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 没有浮动在全屏应用程序上方的任何帮助,我们将不胜感激!
版本:
Swift 5
Xcode 11.2.1
7 个月后,我设法通过将 window 的 styleMask 更改为无边框
使其正常工作
window.styleMask = [.borderless]
迟到总比不迟到好...
我正在尝试创建一个 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 没有浮动在全屏应用程序上方的任何帮助,我们将不胜感激!
版本:
Swift 5
Xcode 11.2.1
7 个月后,我设法通过将 window 的 styleMask 更改为无边框
使其正常工作window.styleMask = [.borderless]
迟到总比不迟到好...