[SwiftUI]List(リスト)を特定の位置までスクロールするには?

SwiftUI

どうも、ちょげ(@chogetarou)です。

Listを指定した位置までコードでスクロールする方法を紹介します。

スポンサーリンク

方法

インターフェース, インターネット, プログラム, ブラウザ, Www

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の特定の位置までスクロールできるようになります。

scrollToメソッドの引数「anchor」で、スクロールする特定の位置が、スクロール後に画面のどこに配置されるかを指定できます。

使用例

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)
                }
            }
        }
    }
}

コメント

タイトルとURLをコピーしました