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

SwiftUI中EditButton使用问题:点击按钮Form未同步更新

问题原因及解决方案

你的代码问题出在禁用动画的方式以及对editMode状态的监听上,不是系统Bug,是使用方式有误。

问题点分析

  1. 你通过.animation(nil, value: editMode?.wrappedValue)强制禁用动画,但editMode?.wrappedValue是可选类型,SwiftUI监听可选值变化时可能无法正确触发视图更新。
  2. 直接判断editMode?.wrappedValue.isEditing的写法不够严谨,EditMode本身提供了isEditing计算属性,直接使用editMode?.isEditing更规范。

修复后的代码

struct ContentView: View {
    @Environment(\.editMode) private var editMode
    @State private var name = "Maria Ruiz"

    var body: some View {
        NavigationStack {
            Form {
                if editMode?.isEditing == true {
                    TextField("Name", text: $name)
                        .background(.blue)
                } else {
                    Text(name)
                        .background(.red)
                }
            }
            .toolbar {
                EditButton()
            }
        }
    }
}

额外优化建议

如果确实需要禁用切换编辑模式时的动画,改用以下方式(避免传递可选值给value参数):

.animation(.none, value: editMode?.isEditing ?? false)

通过非可选的布尔值触发状态监听,SwiftUI就能正确识别变化并更新视图。

内容的提问来源于stack exchange,提问作者Mark

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 21:38:10