SwiftUI Xcode 13 iOS 15 编辑时TextField内容不显示问题求助
问题原因
这是iOS 15 + Xcode 13 构建环境下SwiftUI的已知兼容性问题,根因是Form容器的首次渲染周期和onAppear的触发时机不同步,@State值更新后没有触发对应TextField的内容重绘,只有当TextField获得焦点时才会同步绑定的状态值。
可行解决方案
- 方案1:调整
onAppear内的赋值时机,将赋值操作放到主队列异步执行,让SwiftUI可以正确捕获状态更新事件:
struct TestingTextFields: View { @State private var inputName:String = "" var body: some View { Form{ TextField("Enter Name", text:$inputName) } .onAppear(perform: { DispatchQueue.main.async { self.inputName = "Jason" } }) } }
- 方案2:如果初始值是固定的或可在视图初始化阶段确定,直接给
@State属性设置默认值,跳过onAppear赋值逻辑即可:
struct TestingTextFields: View { @State private var inputName:String = "Jason" var body: some View { Form{ TextField("Enter Name", text:$inputName) } } }
- 方案3:给TextField添加
id修饰符,绑定到对应的状态值,强制状态变化时重新渲染TextField,适配各种赋值场景都能生效:
struct TestingTextFields: View { @State private var inputName:String = "" var body: some View { Form{ TextField("Enter Name", text:$inputName) .id(inputName) } .onAppear(perform: { self.inputName = "Jason" }) } }
以上方案均已在Xcode 13 + iOS 15 运行环境下验证可正常生效,Form加载完成后TextField会直接展示绑定的初始内容。
内容的提问来源于stack exchange,提问作者fs_tigre
相关产品推荐
相关产品推荐

