Skip to main content

How to customize stack layouts with alignment and spacing

About 3 minSwiftSwiftUIArticle(s)bloghackingwithswift.comcrashcourseswiftswiftuixcodeappstore

How to customize stack layouts with alignment and spacing 관련

SwiftUI by Example

Back to Home

How to customize stack layouts with alignment and spacing | SwiftUI by Example

How to customize stack layouts with alignment and spacing

Updated for Xcode 15

You can add spacing inside your SwiftUI stacks by providing a value in the initializer, like this:

VStack(spacing: 50) {
    Text("SwiftUI")
    Text("rocks")
}

Download this as an Xcode projectopen in new window

The text “SwiftUI” some distance above the text “rocks”.
The text “SwiftUI” some distance above the text “rocks”.

Alternatively, you can create dividers between items so that SwiftUI makes a small visual distinction between each item in the stack, like this:

VStack {
    Text("SwiftUI")
    Divider()
    Text("rocks")
}

Download this as an Xcode projectopen in new window

The text “SwiftUI” above the text “rocks”. The two words are separated by a thin gray dividing line.
The text “SwiftUI” above the text “rocks”. The two words are separated by a thin gray dividing line.

By default, items in your stacks are aligned centrally. In the case of HStack that means items are aligned to be vertically in the middle, so if you have two text views of different heights they would both be aligned to their vertical center. For VStack that means items are aligned to be horizontally in the middle, so if you have two text views of different lengths they would both be aligned to their horizontal center.

To adjust this, pass in an alignment when you create your stack, like this:

VStack(alignment: .leading) {
    Text("SwiftUI")
    Text("rocks")
}

Download this as an Xcode projectopen in new window

The text “SwiftUI” above the text “rocks”. The words' left edges are vertically aligned.
The text “SwiftUI” above the text “rocks”. The words' left edges are vertically aligned.

That will align both “SwiftUI” and “rocks” to their left edge, but they will still ultimately sit in the middle of the screen because the stack takes up only as much space as it needs.

You can of course use both alignment and spacing at the same time, like this:

VStack(alignment: .leading, spacing: 20) {
    Text("SwiftUI")
    Text("rocks")
}

Download this as an Xcode projectopen in new window

The text “SwiftUI” some distance above the text “rocks”. The words' left edges are vertically aligned.
The text “SwiftUI” some distance above the text “rocks”. The words' left edges are vertically aligned.

That will align both text views horizontally to the leading edge (that's left for left to right languages), and place 20 points of vertical space between them.

Similar solutions…
How to use Instruments to profile your SwiftUI code and identify slow layouts | SwiftUI by Example

How to use Instruments to profile your SwiftUI code and identify slow layouts
How to adjust text alignment using multilineTextAlignment() | SwiftUI by Example

How to adjust text alignment using multilineTextAlignment()
How to add spacing between letters in text | SwiftUI by Example

How to add spacing between letters in text
How to style text views with fonts, colors, line spacing, and more | SwiftUI by Example

How to style text views with fonts, colors, line spacing, and more
How to control which NavigationSplitView column is shown in compact layouts | SwiftUI by Example

How to control which NavigationSplitView column is shown in compact layouts

이찬희 (MarkiiimarK)
Never Stop Learning.