我有一个简单的HStack
,包含2个Text
结构体,显示一个计时器。当计时器值改变时,它会稍微改变位置。有办法避免这种行为吗?
struct DurationLabel: View {
let majorDuration: String // the hours/minutes part "00:00"
let minorDuration: String // the seconds part "00"
var body: some View {
HStack(spacing: 0) {
Text(majorDuration + minorDuration)
.font(.system(size: 90))
Text(minorDuration)
.font(.body)
}
}
}
2条答案
按热度按时间mrzz3bfm1#
对于像这样的显示,我更喜欢使用等宽数字的字体。你可以在你的文本中这样使用它们:
juud5qan2#
我已经为音频播放器等做过很多次了...如果你想保持相同的字体,你可以做一些类似的事情:
ZStack
将根据最大的子视图调整自身的大小,并且0
基本上是所有字体中最宽的数字。使用
.center
对齐可以防止周围的视图每秒移动,使用.leading
可以防止标签本身移动太多。这种技术适用于任何可能改变大小的内容。只需加载一个“虚拟”视图,尽可能大的版本并隐藏它。然后将真实的内容保留在可见视图中。这样就可以避免硬编码帧大小等。