SwiftUI中EditButton使用问题:点击按钮Form未同步更新
问题原因及解决方案
你的代码问题出在禁用动画的方式以及对editMode状态的监听上,不是系统Bug,是使用方式有误。
问题点分析
- 你通过
.animation(nil, value: editMode?.wrappedValue)强制禁用动画,但editMode?.wrappedValue是可选类型,SwiftUI监听可选值变化时可能无法正确触发视图更新。 - 直接判断
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
相关产品推荐
相关产品推荐

