iOS 17 引入的新 ScrollView 修饰符之一是
.scrollPosition(id:)
,它允许我们绑定滚动到视图的 ID。从Apple的文档中,我们可以这样做:
@Binding var items: [Item]
@Binding var scrollPosition: Item.ID?
ScrollView {
LazyVStack {
ForEach(items) { item in
ItemView(item)
}
}
.scrollTargetLayout()
}
.scrollPosition(id: $scrollPosition)
但是假设我们希望
scrollPosition
代表 item
中每个 items
的 index。例如,当我们滚动到第一个
ItemView
时,scrollPosition
应该为0;当我们滚动到第二个ItemView
时,它应该是1,依此类推。
我们如何在 SwiftUI 中实现这一点(使用此修饰符)?
尝试这种方法,声明
scrollPosition: Int?
,
在 items.enumerated()
循环中使用 ForEach
,以及 id(index)
,例如:
@Binding var scrollPosition: Int?
和
ForEach(Array(items.enumerated()), id: \.1.id) { index, item in
ItemView(item).id(index)
}