带有 SwiftUI 的 macOS 桌面应用程序:如何从菜单栏 (MenuBarExtra) 打开窗口,并将其显示在顶部?

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

我有一个菜单栏图标,当我单击它时,我想打开一个新窗口。这部分有效。但该窗口有时会被其他窗口覆盖。如何将窗口设置在其他窗口之上?

我想继续尽可能多地使用 SwiftUI。

这是我迄今为止尝试过的:

import SwiftData
import SwiftUI

@main
struct ScreenOnTimeApp: App {
    @Environment(\.dismissWindow) private var dismissWindow
    @Environment(\.openWindow) private var openWindow

    var body: some Scene {
        Window("State changes", id: "another-window-id") {
            PowerChangesWindow().onAppear {
                dismissWindow(id: "another-window-id")
            }
        }

        Window("foobar", id: "foobar") {
            VStack {
                Text("Some Text ...")
            }
            .frame(width: 350, height: 250)
        }

        MenuBarExtra("1", systemImage: "1.circle") {
            Button("One") {
                // i want the window to be always above other windows...
                dismissWindow(id: "foobar")
                openWindow(id: "foobar")
            }
            Button("Two") {
                NSApp.activate(ignoringOtherApps: true)
                dismissWindow(id: "another-window-id")
                openWindow(id: "another-window-id")
            }
        }
    }
}
swift cocoa swiftui
1个回答
0
投票

如果您想要一个“浮动”窗口,在 macOS 15 中,您可以在内容视图上使用

.windowLevel(.floating)
(或在您的情况下使用 VStack)。

对于早期版本,这里有一个解决方案:https://stackoverflow.com/a/77184303/896907

© www.soinside.com 2019 - 2024. All rights reserved.