我有两个文本的简单视图。它body
是这样的:
VStack {
Text("One")
Text("Two")
Text("Three")
}
这会产生如下视图:
但我想要的是,仅对Text
视图使用修饰符(即不HStack
使用Spacer
s),实现如下布局:
这目前可能吗?我希望以某种方式使Text
s 全宽,然后仅使用文本对齐方式就可以了,但还没有弄清楚。
嗯...因为没有任何附加条件或限制,只需添加两行代码
预览中的演示(蓝色边框只是代码中的一个选择)
VStack {
Text("One")
.frame(maxWidth: .infinity, alignment: .leading)
Text("Two")
Text("Three")
.frame(maxWidth: .infinity, alignment: .trailing)
}
一种方法是只设置框架:
struct ContentView: View {
var body: some View {
VStack {
Text("One")
.frame(minWidth: 0,
maxWidth: .infinity,
alignment: .leading)
Text("Two")
.frame(minWidth: 0,
maxWidth: .infinity,
alignment: .center)
Text("Three")
.frame(minWidth: 0,
maxWidth: .infinity,
alignment: .trailing)
}
}
}
是的,这是可能的。您可以定义一个修饰符,如:
extension View {
func horizontalAlignment(_ alignment: HorizontalAlignment) -> some View {
Group {
if alignment == .leading {
HStack {
self
Spacer()
}
} else if alignment == .trailing {
HStack {
Spacer()
self
}
} else {
self
}
}
}
}
并像这样使用它:
VStack {
Text("One")
.horizontalAlignment(.leading)
Text("Two")
.horizontalAlignment(.center)
Text("Three")
.horizontalAlignment(.trailing)
}
当然,多种方法是可能的。