You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI中MenuBarExtra无法实时更新视图问题求助

解决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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 18:42:03