我发现,如果我在 SwiftUI 应用程序 App 结构中定义一个 Window 结构,它会创建一个窗口,然后我可以使用环境变量从菜单命令打开该窗口。
但是,系统会在启动时打开该窗口。我想要的是信息窗口的单个实例,理想情况下,它是从菜单命令延迟创建的,在关闭时销毁,并在下次调用菜单命令时重新创建。 (我将使用它来显示有关应用程序处理的日志信息。)
如果失败,我希望将窗口创建为隐藏,然后使用菜单命令取消隐藏。
我该怎么做?如果我将 .hidden 添加到窗口,它就会永远隐藏。
如果您的应用程序有
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("") { }
这使得它几乎看不见。
也就是说,如果我启动一个应用程序,我希望看到一个窗口弹出,或者菜单栏中额外出现一个新的菜单栏。启动一个应用程序,然后除了左上角的应用程序名称发生变化之外没有任何反应,这有点奇怪。