3
votes

I've been building an application in SwiftUI recently and today I'm noticing that the VStack Alignment is having some strange behavior. No matter the alignment I use, the view isn't aligning outside of the center. See below:

VStack(alignment: .trailing, spacing: 0) {
    Text("Hello, World!")
}

enter image description here

VStack(alignment: .center, spacing: 0) {
    Text("Hello, World!")
}

sw

It's doing this in both the preview and the simulator, I'm trying to align my text to the right edge of the screen.

Full Code:

import SwiftUI

struct DemoView: View {
    var body: some View {
        VStack(alignment: .center, spacing: 0) {
            Text("Hello, World!")
        }
    }
}

struct DemoView_Previews: PreviewProvider {
    static var previews: some View {
        DemoView()
    }

}
2
That's not a bug. SwiftUI parent view is the same size as its child view if you don't specify size to the parent view. - Dscyre Scotti

2 Answers

7
votes

The VStack(alignment:...) is for aligning subviews, but you have only one subview, so nothing to align

By default all stacks are tight to content (just add .border to your test VStack/s and you see the result, so there is no area to move content.

What you expected is solved by giving frame alignment in stack providing screen-wide area:

demo

VStack {
    Text("Hello, World!")
}.frame(maxWidth: .infinity, alignment: .trailing)

P.S. SwiftUI still has many bugs, but not here :)

0
votes

This can be solved with a Spacer.

Alignment leading:

var body: some View {
        HStack {
            Text("Hello, World!")
            
            Spacer()
        }
    }

Alignment trailing:

var body: some View {
        HStack {
            Spacer()
            
            Text("Hello, World!")
        }
    }