| < How to add horizontal and vertical scrolling using ScrollView | How to create 3D effects like Cover Flow using ScrollView and GeometryReader > |
Updated for Xcode 16.4
If you want to programmatically make SwiftUI’s ScrollView move to a specific location, you should embed it inside a ScrollViewReader. This provides a scrollTo() method that can move to any view inside the parent scrollview, just by providing its anchor.
For example, this creates 100 colored boxes in a vertical scroll view, and when you press the button it will scroll directly to the box with ID 8:
struct ContentView: View {
let colors: [Color] = [.red, .green, .blue]
var body: some View {
ScrollViewReader { value in
ScrollView {
Button("Jump to #8") {
value.scrollTo(8)
}
.padding()
ForEach(0..<100) { i in
Text("Example \(i)")
.font(.title)
.frame(width: 200, height: 200)
.background(colors[i % colors.count])
.id(i)
}
}
}
.frame(height: 350)
}
}
Download this as an Xcode project
For more control over your scroll, you can specify a second parameter called anchor, to control where your target view should be positioned after the scroll has completed.
For example, this will scroll to the same view as before, except this time place that view at the top:
struct ContentView: View {
let colors: [Color] = [.red, .green, .blue]
var body: some View {
ScrollViewReader { value in
ScrollView {
Button("Jump to #8") {
value.scrollTo(8, anchor: .top)
}
.padding()
ForEach(0..<100) { i in
Text("Example \(i)")
.font(.title)
.frame(width: 200, height: 200)
.background(colors[i % colors.count])
.id(i)
}
}
}
.frame(height: 350)
}
}
Download this as an Xcode project
If you call scrollTo() inside withAnimation() the movement will be animated.
Tip: scrollTo() works great with lists too.
SAVE 50% All our books and bundles are half price for Black Friday, so you can take your Swift knowledge further for less! Get my all-new book Everything but the Code to make more money with apps, get the Swift Power Pack to build your iOS career faster, get the Swift Platform Pack to builds apps for macOS, watchOS, and beyond, or get the Swift Plus Pack to learn Swift Testing, design patterns, and more.