macOS Sequoia 15.0下SwiftUI窗口无法保持在所有应用(含全屏应用)顶层的解决求助
macOS Sequoia 15.0下SwiftUI窗口无法保持在所有应用(含全屏应用)顶层的解决求助
我自己做了个仅个人使用的自定义时钟App,用来在电脑上看时间,需求很简单——要让它始终显示在所有窗口之上,包括全屏状态的应用和视频。但升级到macOS Sequoia 15.0之后,之前的实现方案失效了:现在切换空间时窗口还能跟着走,但只要把其他应用切到全屏,我的时钟窗口就会被盖住。
我用一个全新的SwiftUI App写了最小复现代码,问题完全一致:
@main struct testtickerApp: App { @NSApplicationDelegateAdaptor(AppDelegate.self) var appDelegate var body: some Scene { WindowGroup { ContentView() } } } class AppDelegate: NSObject, NSApplicationDelegate, NSWindowDelegate { func applicationDidFinishLaunching(_ notification: Notification) { let window = NSApplication.shared.windows.first! window.level = .floating window.styleMask = .borderless window.collectionBehavior = [.canJoinAllApplications, .canJoinAllSpaces, .auxiliary, .fullScreenAuxiliary, .ignoresCycle] } }
而在macOS 15.0之前,这段代码(放在同一个applicationDidFinishLaunching方法里)是完全正常工作的:
func setupWindow(_ window: NSWindow) { window.titleVisibility = .hidden window.titlebarAppearsTransparent = true window.standardWindowButton(NSWindow.ButtonType.closeButton)?.isHidden = true window.standardWindowButton(NSWindow.ButtonType.miniaturizeButton)?.isHidden = true window.standardWindowButton(NSWindow.ButtonType.zoomButton)?.isHidden = true window.isOpaque = false window.hasShadow = false window.level = .floating window.backgroundColor = NSColor.clear window.isReleasedWhenClosed = false window.isMovableByWindowBackground = true window.collectionBehavior = .canJoinAllSpaces window.titlebarSeparatorStyle = .none window.ignoresMouseEvents = true window.delegate = self }
我之前的实现参考了不少相关方案,也查了Apple官方文档里关于fullScreenAuxiliary的说明,按道理应该能让窗口在全屏应用之上显示才对。现在我试过了各种办法:重新关闭再绘制窗口、手动把窗口移到最前、在Info.plist里把LSUIElement设为TRUE,还有其他各种调整,但都没效果。
我对方案的要求不高——不用特别“美观”,也不在乎是否完全符合Apple的规范,只要能让我的时钟窗口重新一直显示在所有窗口(包括全屏应用)之上就行。这是系统的bug吗?有没有可行的解决办法?
备注:内容来源于stack exchange,提问作者Chris McElroy
相关产品推荐
相关产品推荐

