使用 SwiftUI 更改 macOS 窗口级别(以制作浮动窗口)

问题描述 投票:0回答:2

嗨,有没有办法使用 SwiftUI 更改窗口级别,以便我可以为我的 Mac 应用程序制作浮动窗口?我正在使用 SwiftUI 生命周期

swift macos swiftui nswindow
2个回答
7
投票

您可以使用

NSApplication.shared.windows
访问您的窗口并为每个窗口设置
level

例如:

Button("Float windows") {
    for window in NSApplication.shared.windows {
        window.level = .floating
    }
}

0
投票

您可以像 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
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.