Как вы уже в некоторой степени обнаружили, первая часть состоит в том, что вам нужно решить, чего вы хотите. В этом случае вам, кажется, требуется выравнивание по левому краю (на основе вашего решения для заполнения). Так что это хорошо:
HStack {
Text("Latitude:")
Text(verbatim: "\(randomNumber)")
Spacer()
}
Это сделает HStack такой же шириной, как и его содержащее представление, и sh текст слева.
Но, судя по вашим более поздним комментариям, вам кажется, не желать, чтобы он был крайним левым. Вы должны решить, что именно вы хотите в этом случае. Добавление .padding
позволит вам переместить его слева (возможно, добавив только .leading
), но, возможно, вы захотите сопоставить его с размером экрана.
Вот один из способов сделать это. Важно помнить базовый алгоритм c для HStack, который должен предоставить каждому свой минимум, а затем разделить оставшееся пространство между гибкими представлениями.
HStack {
HStack {
Spacer()
Text("Latitude:")
}
HStack {
Text(verbatim: "\(randomNumber)")
Spacer()
}
}
Внешний HStack имеет 2 дочерних элемента, все они гибкие до некоторого минимума, поэтому он предлагает каждому равное количество пространства (1/2 от общей ширины), если он может это вместить.
(Я изначально сделал это с двумя дополнительными прокладками, но я забыл, что у проставок, кажется, есть особая обработка, чтобы их пространство оставалось последним.)
Вопрос в том, что произойдет, если randomNumber
будет слишком длинным? Как написано заверну. В качестве альтернативы вы можете добавить .fixedSize()
, чтобы остановить его от переноса (и pu sh Latitude слева, чтобы он соответствовал). Или вы можете добавить .lineLimit(1)
, чтобы заставить его усечь. Выбор за вами.
Но важно добавить гибкие HStacks. Если каждый ребенок гибок, тогда все они получат одно и то же пространство.
Если вы хотите разделить вещи на трети или четверти, я считаю, что вам нужно добавить что-то другое, кроме спейсера. Например, это даст Latitude и номер 1/4 доступного пространства, а не 1/2 (обратите внимание на добавление Text("")
):
HStack {
HStack {
Text("")
Spacer()
}
HStack {
Spacer()
Text("Latitude:")
}
HStack {
Text(verbatim: "\(randomNumber)")//.lineLimit(1)
Spacer()
}
HStack {
Text("")
Spacer()
}
}
В моем собственном коде я делаю это таких вещей, как
struct RowView: View {
// A centered column
func Column<V: View>(@ViewBuilder content: () -> V) -> some View {
HStack {
Spacer()
content()
Spacer()
}
}
var body: some View {
HStack {
Column { Text("Name") }
Column { Text("Street") }
Column { Text("City") }
}
}
}