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

iOS 17中如何用scrollPosition(id:)获取ScrollView中项的索引

实现ScrollView滚动位置绑定数组索引(iOS 17+)

要让scrollPosition绑定数组的索引而非Item的ID,核心是让列表中每个视图的标识对应其在数组中的索引,具体实现如下:

1. 调整绑定变量类型

将原来的scrollPosition类型从Item.ID?改为Int?,用来存储索引值:

@Binding var items: [Item]
@Binding var scrollPosition: Int? // 现在存储数组索引

2. 修改列表遍历逻辑

使用enumerated()获取数组的索引和元素,同时将索引作为每个列表项的唯一标识传递给ForEach:

ScrollView {
    LazyVStack {
        // 遍历数组的索引和元素,用offset(索引)作为ID
        ForEach(Array(items.enumerated()), id: \.offset) { index, item in
            ItemView(item)
        }
    }
    .scrollTargetLayout()
}
// 绑定scrollPosition到索引类型的ID
.scrollPosition(id: $scrollPosition)

补充说明

  • 滚动到第一个ItemView时,scrollPosition会被设置为0;滚动到第二个则为1,以此类推。
  • 如果数组元素发生增删,索引会自动对应最新的数组顺序,符合“当前数组位置索引”的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 10:06:01