どうも、ちょげ(@chogetarou)です。
Listを指定した位置までコードでスクロールする方法を紹介します。
方法

LIstを特定の位置までスクロールするには、ScrollViewReaderを使います。
まず、ListをScrollViewReader内に入れます。
ScrollViewReader { reader in
List {・・・}
}
次に、Listの行にid修飾子を付与し、id修飾子の引数に値を指定します。
List {
ListRow()
.id(position)
・・・・
}
そして、ボタンなどでScrollViewReaderの引数のscrollToメソッドを呼び出します。
scrollToメソッドの引数には、スクロールする特定の位置を、Listの行に設定したid修飾子の値で指定します。
//ScrollViewReaderの引数(クロージャーの最初に記述)のscrollToメソッドを呼び出す
//scrollToメソッドの引数には、id修飾子で指定した値を
reader.scrollTo(position)
あとは、scrollToメソッドをwithAnimation内に入れます。
withAnimation (.default) {
reader.scrollTo(position)
}
これでListの特定の位置までスクロールできるようになります。
使用例
struct ContentView: View {
var body: some View {
ScrollViewReader { reader in
Button("25行目にスクロール") {
withAnimation(.spring(response: 0.5, dampingFraction: 0.5, blendDuration: 0)) {
reader.scrollTo(25, anchor: .top)
}
}
List {
ForEach(1..<50, id: \.self) { index in
Text("item \(index)")
.id(index)
}
}
}
}
}
コメント