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

SwiftUI中ForEach使用动态count时UI无响应问题求解

问题核心原因

SwiftUI 中使用ForEach(范围)的写法时,默认会将该范围识别为静态常量,仅在视图首次渲染时计算一次,后续即使范围对应的变量发生变化,ForEach 也不会触发重绘,和上层数据源是否更新没有关系。

解决方法

给两个 ForEach 显式指定id: \.self参数,告诉 SwiftUI 要根据范围里的元素值变化来触发重绘:

  1. 第一个 ForEach 修改为:
ForEach(1..<tabBarViewModel.activeFormIndex + 1, id: \.self) { _ in
  1. 第二个 ForEach 修改为:
ForEach(1..<tabBarViewModel.loginForms.count - tabBarViewModel.activeFormIndex, id: \.self) { _ in

修改完成后不需要额外添加本地@State监听发布者的冗余代码,直接用原来的ViewModel属性即可正常响应activeFormIndex的变化刷新UI。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:36:06