Skip to main content

How to scroll to a specific row in a list

About 2 minSwiftSwiftUIArticle(s)bloghackingwithswift.comcrashcourseswiftswiftuixcodeappstore

How to scroll to a specific row in a list 관련

SwiftUI by Example

Back to Home

How to scroll to a specific row in a list | SwiftUI by Example

How to scroll to a specific row in a list

Updated for Xcode 15

If you want to programmatically make SwiftUI's List move to show a specific row, you should embed it inside a ScrollViewReader. This provides a scrollTo() method on its proxy that can move to any row inside the list, just by providing its ID and optionally also an anchor.

For example, this creates 100 rows in a list, and when you press the button it will scroll directly to the row with ID 50:

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

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

Download this as an Xcode projectopen in new window

For more control over your scroll behavior, add an anchor as the second parameter, like this: proxy.scrollTo(50, anchor: .top).

Tips

If you call scrollTo() inside withAnimation() the movement will be animated.

Similar solutions…
How to flash the scroll bar indicators of a ScrollView or List | SwiftUI by Example

How to flash the scroll bar indicators of a ScrollView or List
How to hide the scroll indicators in ScrollView, List, and more | SwiftUI by Example

How to hide the scroll indicators in ScrollView, List, and more
How to allow row selection in a list | SwiftUI by Example

How to allow row selection in a list
How to adjust List row separator insets | SwiftUI by Example

How to adjust List row separator insets
How to add custom swipe action buttons to a List row | SwiftUI by Example

How to add custom swipe action buttons to a List row

이찬희 (MarkiiimarK)
Never Stop Learning.