Reputation: 324
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!")
}
VStack(alignment: .center, spacing: 0) {
Text("Hello, World!")
}
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()
}
}
Upvotes: 8
Views: 3573
Reputation: 81
I agree with the author, the behavior is strange...at least. Alignment for VStack subviews does not work in case:
VStack(alignment: .leading) {
Text("Hello, world!")
Text("Hello, world!")
}
.frame(width: 200, height: 200)
but works in case:
VStack {
Text("Hello, world!")
Text("Hello, world!")
}
.frame(width: 200, height: 200, alignment: .leading)
If this is not a bug then definitively a poor realisation of the "declarative" approach.
Upvotes: 8
Reputation: 258541
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:
VStack {
Text("Hello, World!")
}.frame(maxWidth: .infinity, alignment: .trailing)
P.S. SwiftUI still has many bugs, but not here :)
Upvotes: 21