Reputation: 11362
I have the following code:
HStack(alignment: VerticalAlignment.top) {
Button("x"){
self.errorText = ""
}
//Spacer()
}
I need to locate button on the top. But button is still on the center of HStack view.
What I did wrong?
PS: Using Spacer()
in this place is not solution for me. I need exactly alignment.
NOT NECESSARY PART:
@State var errorText: String = "Some long error text long long long long long long long long long long long long long long long long long long long long"
VStack{
Spacer()
HStack{
Text("Error: \(errorText)")
Spacer()
HStack(alignment: VerticalAlignment.top) {
Button("x"){
self.errorText = ""
}
//Spacer()
}
}
.frame(minHeight:10)
.padding(.all, 5)
}
I don't know height of the VStack (HStack parent), because of I don't know size of the error text;
Spacer() is not solution because of it's makes VStack height to the window height.
Upvotes: 1
Views: 11965
Reputation: 1520
try with alignment .firstTextBaseline
It will align top of the text on the first lines.
VStack{
HStack(alignment: .firstTextBaseline) {
Text("Error: \(errorText)")
Button("x"){ self.errorText = "" }
}
.padding()
}
Upvotes: 0
Reputation: 17854
I have found that the alignment
property in the HStack initializer rarely works how you expect.
VStack {
HStack(alignment: .bottom, content: {
Text("Left").background(.red)
Text("Right").background(.green)
})
.frame(maxWidth: .infinity)
.frame(height: 100)
.background(.blue)
}
A more reliable way of setting the cross-axis alignment in an HStack is to use the .frame
modifier like this:
VStack {
HStack(alignment: .center, content: {
Text("Left").background(.red)
Text("Right").background(.green)
})
.frame(maxWidth: .infinity)
.frame(height: 100, alignment: .bottom) // Add this
.background(.blue)
}
Upvotes: 1
Reputation: 120113
You should align the outer HStack
instead.
Also the inner one is useless. So you can get rid of it.
VStack{
Spacer()
HStack(alignment: .top) {
Text("Error: \(errorText)")
Spacer()
Button("x"){ self.errorText = "" }
}
.frame(minHeight:10)
.padding(.all, 5)
}
Upvotes: 6