0

这是一个简单的 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)
    }
}
4

0 回答 0