SwiftUI中如何禁用WindowGroup窗口持久化?
解决SwiftUI重启后内容窗口残留的问题
你的代码中,WindowGroup默认会自动恢复用户之前打开的窗口状态,这就是重启后内容窗口残留的原因。要实现类似Xcode的启动逻辑——每次启动只显示欢迎窗口,内容窗口不自动恢复,可以通过以下修改解决:
- 禁用内容窗口的自动恢复:给内容窗口的
WindowGroup添加.restorationBehavior(.never),阻止系统保存和恢复该窗口组的窗口状态。 - 确保欢迎窗口强制显示:在欢迎窗口的
.onAppear回调中触发打开操作,保证每次App启动时都会显示欢迎窗口,不受之前关闭状态的影响。
修改后的完整代码:
import SwiftUI @main struct StackApp: App { @Environment(\.openWindow) var openWindow var body: some Scene { Window("Welcome to App", id: "welcome-to-app") { VStack { Text("Welcome") Button(action: { openWindow(id: "app-content") }) { Text("Open Content") } } } .defaultSize(CGSize(width: 200, height: 200)) .onAppear { // 确保启动时打开欢迎窗口 openWindow(id: "welcome-to-app") } WindowGroup(id: "app-content") { VStack { Text("App Content") } } .defaultSize(CGSize(width: 200, height: 200)) .restorationBehavior(.never) // 禁止内容窗口自动恢复 } }
注:.restorationBehavior是macOS 13.0+(Ventura)及iOS 16.0+的API,适配对应系统版本即可生效。
内容的提问来源于stack exchange,提问作者southwest-quack
相关产品推荐
相关产品推荐

