这是 SwiftUI 一个相当令人困惑的方面。 VStack 对齐方式指定其元素在 VStack 框架内的对齐方式,而 Text.frame 对齐方式指定文本在 Text.frame 内的对齐方式。
我发现在调试时添加一些边框很有帮助:
VStack(alignment: .leading) {
Text("Haibo: asdasd")
.frame(maxWidth: .infinity)
.border(Color.red , width: 2.0)
Text("Jobs: WDC WDC WDC WDCWWWWW")
.border(Color.green , width: 2.0)
}
现在您可以看到 maxWidth: .infinity 的文本有一个跨越 VStack 框架整个宽度的框架。文本框架is居中对齐,但其中的文本默认居中对齐。
这里值得一提的是,“jobs...”文本也与其文本框架居中对齐,但这并不明显,因为框架仅根据文本调整大小,然后文本框架本身在 VStack 框架内前导对齐。
现在试试这个:
VStack(alignment: .leading) {
Text("Haibo: asdasd")
.frame(maxWidth: .infinity, alignment: .leading)
.border(Color.red , width: 2.0)
Text("Jobs: WDC WDC WDC WDCWWWWW")
.border(Color.green , width: 2.0)
}
文本框架仍然是 VStack 框架的全宽,但文本现在在文本框架内领先对齐。
这是没有边框的片段:
VStack(alignment: .leading) {
Text("Haibo: asdasd")
.frame(maxWidth: .infinity, alignment: .leading)
Text("Jobs: WDC WDC WDC WDCWWWWW")
}
我发现这是一篇有助于理清对齐工作原理的文章:
SwiftUI 中的对齐指南 https://swiftui-lab.com/alignment-guides/