SwiftUI中MenuBarExtra无法实时更新视图问题求助
你遇到的问题是因为App结构体中的@State变量无法在多个Scene之间正确传递更新。WindowGroup和MenuBarExtra是独立的Scene,@State的更新无法自动同步到MenuBarExtra的视图中。
解决方案:使用ObservableObject管理共享状态
把状态封装到一个遵循ObservableObject的类中,通过@Published标记需要监听的属性,再在App中用@StateObject持有这个状态实例,这样所有Scene都能监听状态变化。
修改后的代码:
import SwiftUI class AppState: ObservableObject { @Published var text = "" } @main struct MyApp: App { @StateObject private var appState = AppState() var body: some Scene { WindowGroup { VStack { Text(appState.text) // 1 - 实时更新 TextField("", text: $appState.text) } } MenuBarExtra("A") { Text(appState.text) // 2 - 现在会实时更新 } .menuBarExtraStyle(.window) } }
原理说明
ObservableObject+@Published:当text的值变化时,会自动向所有绑定的视图发送更新通知。@StateObject:确保在App的整个生命周期中只创建一个AppState实例,保证状态在所有Scene中是共享且一致的。
这样修改后,TextField输入的内容会同时同步到主窗口和MenuBarExtra的Text组件中。
内容的提问来源于stack exchange,提问作者Kaunteya
相关产品推荐
相关产品推荐

