[SwiftUI]List(リスト)で自動スクロールするには?

SwiftUI

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

Listで自動スクロールする方法を紹介します。

スポンサーリンク

方法

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

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

コメント

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