设置初始可见项 LazyGrid (swiftUI)

Set the initially visible item LazyGrid (swiftUI)

我正在尝试设置最初可见的项 LazyGrid (swiftUI)

想法是将初始值改为默认值 (0)

初始值变成了我选择的值,比如4

可以将网格移动到 0 和 9。

我有简单的网格

import SwiftUI

struct ContentView: View {
    var body: some View {

        ScrollView(.horizontal, showsIndicators: false) {
          
            LazyHGrid(rows: [GridItem(.flexible(minimum: 200, maximum: 200))]) {
                ForEach(0 ..< 10){ val in

                    ZStack{

                    Rectangle()
                        .foregroundColor(.gray)
                        .frame(width: 200, height: 200)
                        
                        
                        Text("\(val)")
                            .fontWeight(.bold)
                            .font(.title)
                            .foregroundColor(.white)
                    }
                }
            }
        }
    }
}

SwfitUI 2.0

ScrollViewReader 用于此目的。我们为视图提供 id,并通过滚动视图代理指定哪个视图应该可见。

这是一个演示。测试 Xcode 12 / iOS 14

struct DemoView: View {
    let initiail: Int = 4

    var body: some View {
        ScrollView(.horizontal, showsIndicators: false) {
            ScrollViewReader { sp in
                LazyHGrid(rows: [GridItem(.flexible(minimum: 200, maximum: 200))]) {
                    ForEach(0 ..< 10, id: \.self){ val in

                        ZStack{

                        Rectangle()
                            .foregroundColor(.gray)
                            .frame(width: 200, height: 200)


                            Text("\(val)")
                                .fontWeight(.bold)
                                .font(.title)
                                .foregroundColor(.white)
                        }.id(val)
                    }
                }.onAppear { sp.scrollTo(initiail) }
            }
        }
    }
}