嗨,有没有办法使用 SwiftUI 更改窗口级别,以便我可以为我的 Mac 应用程序制作浮动窗口?我正在使用 SwiftUI 生命周期
您可以使用
NSApplication.shared.windows
访问您的窗口并为每个窗口设置 level
。
例如:
Button("Float windows") {
for window in NSApplication.shared.windows {
window.level = .floating
}
}
您可以像 Alexander 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
}
}