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

iOS 18中含TextField绑定与焦点状态的动态List触发无限循环

iOS 18 动态List绑定TextField触发无限循环的原因分析

问题根源:不稳定的行ID导致视图无限重建

你的代码里,Row类的id实现存在致命问题——每次访问id都会生成全新的UUID:

var id: String {
  UUID().uuidString
}

在iOS 18之前,SwiftUI对动态List的渲染逻辑对ID稳定性的容忍度较高,但iOS 18优化了List的差异化渲染机制:一旦行的ID发生变化,List会直接销毁旧的行视图,重新创建新的视图实例。

无限循环的触发链路:

  • List遍历数据源时,每次获取row.id都会得到新值,List判定该行需要重新创建
  • 新的MyTextFieldView实例被初始化,内部的@FocusState会触发视图状态更新
  • 视图更新又会促使List重新遍历数据源,再次生成新的row.id,形成无限循环

静态List不会出现这个问题,是因为静态行的标识是固定的,不存在反复销毁重建视图的触发条件。

修复验证:

把id改成初始化时固定的静态值,循环问题就会消失:

final class Row: ObservableObject, Identifiable {
  @Published var text: String = ""
  let id: String = UUID().uuidString // 初始化时生成一次,固定ID
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 05:21:11