【发布时间】:2020-03-15 00:14:00
【问题描述】:
我正在尝试创建一个 NSWindow 并使窗口浮动在全屏应用程序上方。我已经尝试过使用下面概述的两种不同方法。
方法 1 - 故事板(工作)
我有一个包含窗口控制器的情节提要的项目。此窗口控制器在身份检查器中分配了以下类。
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 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)
}
}
尽管这成功地创建了一个浮动在窗口应用程序上方的 NSWindow,如 here 所见,但 NSWindow 拒绝浮动在全屏应用程序上方。
从我尝试调试问题开始,似乎window.collectionBehavior = [.canJoinAllSpaces, .fullScreenAuxiliary] 在第二种方法中以编程方式创建 NSWindow 时没有做任何事情。
我对 swift 还很陌生,因此对于第二种方法中为什么 NSWindow 没有浮动在全屏应用程序上方的任何帮助将不胜感激!
版本:
斯威夫特 5
Xcode 11.2.1
【问题讨论】:
-
@LeoDabus 我已经尝试在 windowDidAppear、windowDidLoad 甚至在 IBAction 中设置我的窗口级别,这对全屏完全没有影响。我也使用过 window?.level = .floating 。显然,您链接的问题并不相关,尤其是因为我的问题仅适用于以编程方式创建 NSWindow 而不是使用情节提要的情况。我肯定遗漏了一些东西,但我相信这不是你所链接的。
-
这只是为了让你知道正确的语法如何
-
我认为自 High Sierra 以来您不能在全屏以上设置窗口(包括屏幕保护程序以上)
-
@LeoDabus 在简单地评论链接之前添加一些上下文可能是明智的......关于高山脉的假设是不正确的,因为我已经有一个窗口浮动在全屏之上在我当前工作Catalina 上的应用程序,只是不完全以编程方式,这是我想做的。
标签: swift xcode macos nswindow swift5