有没有办法在显示计时器时防止SwiftUI文本标签轻微移动?

zhte4eai  于 2023-01-20  发布在  Swift
关注(0)|答案(2)|浏览(139)

我有一个简单的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)
        }
    }
}

mrzz3bfm

mrzz3bfm1#

对于像这样的显示,我更喜欢使用等宽数字的字体。你可以在你的文本中这样使用它们:

Text("your Text here").font(Font.largeTitle.monospacedDigit())
juud5qan

juud5qan2#

我已经为音频播放器等做过很多次了...如果你想保持相同的字体,你可以做一些类似的事情:

ZStack(alignment: .leading) {
  Text("00:00").opacity(0.0)
  Text("MM:SS") // Put your actual numbers in here with the same formatting.
}

ZStack将根据最大的子视图调整自身的大小,并且0基本上是所有字体中最宽的数字。
使用.center对齐可以防止周围的视图每秒移动,使用.leading可以防止标签本身移动太多。
这种技术适用于任何可能改变大小的内容。只需加载一个“虚拟”视图,尽可能大的版本并隐藏它。然后将真实的内容保留在可见视图中。这样就可以避免硬编码帧大小等。

相关问题