VStack{
HStack(){
Text("First Name").frame(width: 120, alignment: .leading)
TextField("First name", text: $name).textFieldStyle(RoundedBorderTextFieldStyle())
}
HStack(){
Text("Last Name").frame(width: 120, alignment: .leading)
TextField("Last Name", text: $name).textFieldStyle(RoundedBorderTextFieldStyle())
}
HStack{
Text("Phone number").frame(width: 120, alignment: .leading)
TextField("Phone number", text: $name).textFieldStyle(RoundedBorderTextFieldStyle())
}
Spacer()
}.padding(10)
или более гибкое решение
struct TestView: View {
@State var name = ""
@State var width: CGFloat = 0
struct Label: ViewModifier {
@Binding var width: CGFloat
func getWidth(content: Content, proxy: GeometryProxy) -> some View {
if proxy.size.width > width {
RunLoop.main.perform {
self.width = proxy.size.width
}
}
return content
}
func body(content: Content) -> some View {
content.overlay(GeometryReader { proxy in
self.getWidth(content: content, proxy: proxy)
}).frame(minWidth: self.width, alignment: .leading)
}
}
var body: some View {
VStack(alignment: .center){
HStack(){
Text("First Name").modifier(Label(width: $width))
TextField("First name", text: $name).textFieldStyle(RoundedBorderTextFieldStyle())
}
HStack(){
Text("Last Name").modifier(Label(width: $width))
TextField("Last Name", text: $name).textFieldStyle(RoundedBorderTextFieldStyle())
}
HStack{
Text("Phone numbe").modifier(Label(width: $width))
TextField("Phone number", text: $name).textFieldStyle(RoundedBorderTextFieldStyle())
}
Spacer()
}.padding(10)
}
}