这是一个简单的 SwiftUI 代码,它构建了一个放在 2D ScrollView 中的大网格。单击每个项目将强制 ScrollView 滚动到 id 比单击项目多 50 的另一个项目。ScrollView 确实滚动了,但它从未滚动到正确的那个。我在 macOS 和 iOS 上尝试过,但都没有成功。我还尝试使用 VStack 和 HStack 代替 LazyVGrid,但仍然没有用。实现这一目标的正确方法是什么?
struct ContentView: View {
let columns = Array.init(repeating: GridItem(.fixed(80)), count: 20)
var body: some View {
ScrollView([.horizontal, .vertical]) {
ScrollViewReader { proxy in
LazyVGrid(columns: columns, spacing: 20) {
ForEach(0..<500) { i in
ZStack {
Circle()
.fill(Color.green)
.frame(width: 30, height: 30)
Text("\(i)")
}
.id("\(i)")
.onTapGesture {
proxy.scrollTo("\(i + 50)")
}
}
}
.padding(.horizontal)
}
}
.frame(minWidth: 500, minHeight: 300)
}
}