嗨,有没有办法用SwiftUI改变window level,这样我就可以为我的Mac应用程序创建一个浮动窗口?我正在使用SwiftUI生命周期
bqjvbblv1#
您可以使用NSApplication.shared.windows访问您的窗口,并为每个窗口设置level。例如:
NSApplication.shared.windows
level
Button("Float windows") { for window in NSApplication.shared.windows { window.level = .floating } }
juzqafwq2#
你可以像 Alexandria Sandberg那样使用window.level = .floating,但你可能只想为应用程序中的一个窗口指定这个值,而不是每个窗口。也就是说,看看Asperi的帖子,它向您展示了如何在SwiftUI中访问macOS中的窗口:https://stackoverflow.com/a/63439982/10844710我将在这里总结相关代码:
#if os(macOS) import SwiftUI import AppKit struct WindowAccessor: NSViewRepresentable { @Binding var window: NSWindow? func makeNSView(context: Context) -> NSView { let view = NSView() DispatchQueue.main.async { self.window = view.window } return view } func updateNSView(_ nsView: NSView, context: Context) {} } #endif
然后,您可以在应用顶层的窗口组中使用它,如下所示:
ContentView().background(WindowAccessor(window: $window)).onChange(of: window) { newWindow in if windowFloats { newWindow?.level = .floating } else { newWindow?.level = .normal } }.onChange(of: windowFloats) { floats in if windowFloats { window?.level = .floating } else { window?.level = .normal } }
您可以根据需要包含变量:
#if os(macOS) @State var window: NSWindow? @AppStorage("windowFloats") private var windowFloats: Bool = false #endif
2条答案
按热度按时间bqjvbblv1#
您可以使用
NSApplication.shared.windows
访问您的窗口,并为每个窗口设置level
。例如:
juzqafwq2#
你可以像 Alexandria Sandberg那样使用window.level = .floating,但你可能只想为应用程序中的一个窗口指定这个值,而不是每个窗口。
也就是说,看看Asperi的帖子,它向您展示了如何在SwiftUI中访问macOS中的窗口:https://stackoverflow.com/a/63439982/10844710
我将在这里总结相关代码:
然后,您可以在应用顶层的窗口组中使用它,如下所示:
您可以根据需要包含变量: