Я вижу несколько возможностей:
Вы можете поместить Text
в VStack
с другим Text
, содержащим то, что вы считаете самым длинным из возможных String
в этом контексте. Даже если он скрыт, он все же заставляет VStack
принять свои размеры. Вам нужно будет настроить интервал в VStack
в зависимости от размера шрифта.
HStack(alignment: .bottom) {
VStack(alignment: .leading, spacing: -20) {
Text("888 BPM").hidden()
Text("\(self.hr) BPM")
}
Image(systemName: "heart.fill")
//etc.
}
Другой вариант - указать Text
явную ширину кадра. Тем не менее, он не идеален для динамического текста:
Text("\(self.hr) BPM").frame(width: 100)
Вы также можете поместить Spacer()
между двумя элементами и толкнуть сердце вправо.