SwiftUI - ScrollViewReader的scrollTo不滚动

6vl6ewon  于 2023-08-02  发布在  Swift
关注(0)|答案(2)|浏览(118)

我有一个简单的SwiftUI列表,当用户单击按钮时,我希望滚动到一行。我从hackingwithswift复制了这个代码。它应该工作,但它没有做。

struct ContentView: View {
    var body: some View {
        ScrollViewReader { proxy in
            VStack {
                Button("Jump to #50") {
                    proxy.scrollTo(5, anchor: .top)
                }

                List(0..<100) { i in
                    Text("Example \(i)")
                    .id(i)
                }
            }
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

字符串
我在iOS 14.2上测试了它,包括模拟器和物理设备。
我读了它的documentation,但没有太多的信息。那么,如何滚动到一行,例如第50行?

lb3vh1jj

lb3vh1jj1#

ScrollViewReader仅适用于:

  • 使用ScrollView
  • 可识别的收藏品清单

它不适用于Range<Int>List,除非显式设置其id

显式设置id。

// List(0..<100, id: \.self)

struct ContentView: View {
    var body: some View {
        ScrollViewReader { proxy in
            VStack {
                Button("Jump to #50") {
                    proxy.scrollTo(5, anchor: .top)
                }

                List(0..<100, id: \.self) { i in
                    Text("Example \(i)")
                    .id(i)
                }
            }
        }
    }
}

// ForEach(0..<50000, id: \.self)

struct ContentView: View {
    var body: some View {
        ScrollView {
            ScrollViewReader { proxy in
                LazyVStack {
                    ForEach(0..<50000, id: \.self) { i in
                        Button("Jump to \(i+500)") {
                            proxy.scrollTo(i+500, anchor: .top)
                        }
                        Text("Example \(i)")
                            .id(i)
                    }
                }
            }
        }
    }
}

字符串

qkf9rpyu

qkf9rpyu2#

struct ContentView: View {
    var body: some View {
        ScrollViewReader { proxy in
            VStack {
                Button("Jump to #50") {
                    proxy.scrollTo(50, anchor: .top)
                }

                List{
                    ForEach(0..<100) { i in
                        Text("Example \(i)")
                        .id(i)
                    }
                }
            }
        }
    }
}

字符串

相关问题