Это довольно запутанный аспект SwiftUI. Выравнивание VStack определяет, как его элементы выравниваются внутри фрейма VStack, а выравнивание Text.frame определяет, как будет выравниваться текст внутри Text.frame.
Я считаю полезным добавить некоторые границы, поскольку я ' m отладка:
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 Рамка. Текстовый фрейм имеет выравнивание по началу, но текст по умолчанию выровнен по центру.
Здесь стоит упомянуть, что текст "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