Skip to main content

How to add horizontal and vertical scrolling using ScrollView

About 2 minSwiftSwiftUIArticle(s)bloghackingwithswift.comcrashcourseswiftswiftuixcodeappstore

How to add horizontal and vertical scrolling using ScrollView 관련

SwiftUI by Example

Back to Home

How to add horizontal and vertical scrolling using ScrollView | SwiftUI by Example

How to add horizontal and vertical scrolling using ScrollView

Updated for Xcode 15

SwiftUI's ScrollView allows us to create scrolling containers of views relatively easily, because it automatically sizes itself to fit the content we place inside it and also automatically adds extra insets to avoid the safe area.

For example, we could create a scroll list of ten text views like this:

ScrollView {
    VStack(spacing: 20) {
        ForEach(0..<10) {
            Text("Item \($0)")
                .foregroundStyle(.white)
                .font(.largeTitle)
                .frame(width: 200, height: 200)
                .background(.red)
        }
    }
}
.frame(height: 350)

Download this as an Xcode projectopen in new window

Some red squares stretching off of the top and bottom of the image.

Scroll views are vertical by default, but you can control the axis by passing in .horizontal as the first parameter. So, we could flip our previous example to be horizontal like this:

ScrollView(.horizontal) {
    HStack(spacing: 20) {
        ForEach(0..<10) {
            Text("Item \($0)")
                .foregroundStyle(.white)
                .font(.largeTitle)
                .frame(width: 200, height: 200)
                .background(.red)
        }
    }
}

Download this as an Xcode projectopen in new window

Some red squares stretching off of the left and right of the image.
Some red squares stretching off of the left and right of the image.

You can specify both axes at the same time using [.horizontal, .vertical].

Finally, you can decide whether to show the scroll indicators as the scroll action happens, like this:

ScrollView(.horizontal, showsIndicators: false) {
    HStack(spacing: 20) {
        ForEach(0..<10) {
            Text("Item \($0)")
                .foregroundStyle(.white)
                .font(.largeTitle)
                .frame(width: 200, height: 200)
                .background(.red)
        }
    }
}

Download this as an Xcode projectopen in new window

Similar solutions…
How to enable vertical page scrolling | SwiftUI by Example

How to enable vertical page scrolling
How to create scrolling pages of content using tabViewStyle() | SwiftUI by Example

How to create scrolling pages of content using tabViewStyle()
How to disable ScrollView clipping so contents overflow | SwiftUI by Example

How to disable ScrollView clipping so contents overflow
How to indent the content or scroll indicators in a ScrollView | SwiftUI by Example

How to indent the content or scroll indicators in a ScrollView
SwiftUI tips and tricks | SwiftUI by Example

SwiftUI tips and tricks

이찬희 (MarkiiimarK)
Never Stop Learning.