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

SwiftUI中List结合Section与Swipe Actions时行一次性全部加载的问题咨询

SwiftUI List Section + SwipeActions 导致单元格复用失效的问题

这确实是SwiftUI的已知行为(可视为bug),完全不是你的代码实现有问题!

问题原因分析

你遇到的三种场景精准复现了这个问题的触发逻辑:

  • 当List直接包裹ForEach并搭配swipeActions时,SwiftUI的单元格复用机制正常工作,只会加载屏幕可见的行(约21个)。
  • 但把ForEach放到Section内部后再添加swipeActions,SwiftUI会一次性加载所有列表项(1000个),完全跳过了懒加载复用逻辑。
  • 一旦移除swipeActions,Section内的ForEach又会恢复正常的复用行为(加载约18个可见行)。

这个问题在iOS 15到iOS 17的多个SwiftUI版本中都有开发者反馈,本质是Section容器与swipeActions交互时,底层复用逻辑出现异常,没有正确触发懒加载机制。

临时解决方案

如果你的业务需要同时保留Section和SwipeActions功能,可以尝试这些临时方案:

  • 自定义Section替代原生组件:如果不需要原生Section的特定样式(比如分组圆角、默认标题布局),可以用VStack配合分隔线模拟Section的视觉效果,再直接在List中使用带swipeActions的ForEach,这样复用逻辑会恢复正常。
  • 用LazyVStack模拟List:将List替换为ScrollView + LazyVStack手动实现懒加载,不过这种方式需要自行处理列表选中状态、滑动手势等细节,开发成本较高。
  • 等待官方修复:这类底层复用逻辑的问题通常会在SwiftUI的后续版本更新中被优化,可关注Apple开发者文档或版本更新日志。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 18:17:52