SwiftUI WindowGroup:如何限制窗口数量?

ixa*_*any 8 macos swift swiftui windowgroup swiftui-windowgroup

我正在构建一个窗口应用程序,并希望使用新的Swift App Lifecycle

\n
import SwiftUI\n\n@main\nstruct SingleWindowApp: App {\n    var body: some Scene {\n        WindowGroup {\n            ContentView()\n        }\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

默认实现WindowGroup允许窗口的多个实例(即如果您点击\xe2\x8c\x98N)。我\xe2\x80\x99无法找到改变该行为的修饰符。

\n

如何将 WindowGroup 中的窗口数量限制为 1?

\n

Mih*_*atu 9

这应该可以做到:

import SwiftUI

@main
struct SingleWindowApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }.commands {
            CommandGroup(replacing: .newItem, addition: { })
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 旁注:最终用户仍然可以使用“视图”菜单中的“显示选项卡栏”命令添加新的根视图实例,然后单击出现的选项卡栏右侧的“+”按钮。请参阅此内容以找到禁用选项卡的方法:/sf/ask/4582232021/ (4认同)
  • 这会禁用“新建”命令,但如果单个窗口关闭,用户将无法打开新窗口,并且如果应用程序未配置为在单个窗口关闭时退出,则它只是挂起,没有可见的 UI。不确定在 SwiftUI 生命周期中执行此操作的最佳方法,但“典型”UE 是,如果窗口打开,则新功能将被禁用,或者如果不存在,则将打开一个窗口。 (2认同)