どうも、ちょげ(@chogetarou)です。
Listで自動スクロールする方法を紹介します。
方法

Listで自動スクロールするには、ScrollViewReaderを使います。
まず、ListをScrollViewReader内に入れます。
ScrollViewReader { reader in
List {・・・}
}
次に、Listの要素にid修飾子を付与し、id修飾子の引数にはユニークな値を指定します。
List {
ListItem()
.id(value)
・・・・
}
そして、スクロールするタイミングで、ScrollViewReaderの引数からscrollToメソッドを呼び出します。
scrollToメソッドの引数には、スクロールする位置を、リストのid修飾子の値で指定します。
また、スクロールしているように見せるために、scrollToメソッドをwithAnimation内に入れます。
withAnimation(.default) {
//スクロールするタイミングで、scrollToメソッドを呼び出す
//引数には、スクロールの位置を、id修飾子で指定した値で指定
reader.scrollTo(value)
}
使用例
struct ContentView: View {
var body: some View {
ScrollViewReader { reader in
List {
ForEach(1..<50, id: \.self) { index in
Text("item \(index)")
.id(index)
}
}
.onAppear {
withAnimation(.linear(duration: 2)) {
reader.scrollTo(25)
}
}
}
}
}
コメント