SwiftUI Mac 菜单命令创建窗口的单个实例?

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

我发现,如果我在 SwiftUI 应用程序 App 结构中定义一个 Window 结构,它会创建一个窗口,然后我可以使用环境变量从菜单命令打开该窗口。

但是,系统会在启动时打开该窗口。我想要的是信息窗口的单个实例,理想情况下,它是从菜单命令延迟创建的,在关闭时销毁,并在下次调用菜单命令时重新创建。 (我将使用它来显示有关应用程序处理的日志信息。)

如果失败,我希望将窗口创建为隐藏,然后使用菜单命令取消隐藏。

我该怎么做?如果我将 .hidden 添加到窗口,它就会永远隐藏。

swift macos swiftui menu
1个回答
0
投票

如果您的应用程序有

MenuBarExtra
,请将其移至
var body: some Scene { ... }
的最开头。如果
MenuBarExtra
是第一个
Scene
,则启动时不会出现
Window
/
WindowGroup
场景。

@main
struct FooApp: App {
    @Environment(\.openWindow) var open
    var body: some Scene {
        MenuBarExtra("Extra Menu") {
            // ...
        }
        
        WindowGroup(id: "ID") {
            ContentView()
        }
        .commands {
            CommandMenu("Foo") {
                Button("Open Window") {
                    open(id: "ID")
                }
            }
        }
    }
}

如果您不想要/不需要

MenuBarExtra
,您可以这样做:

MenuBarExtra("") { }

这使得它几乎看不见。

也就是说,如果我启动一个应用程序,我希望看到一个窗口弹出,或者菜单栏中额外出现一个新的菜单栏。启动一个应用程序,然后除了左上角的应用程序名称发生变化之外没有任何反应,这有点奇怪。

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