【问题标题】:Avoid Text jiggling in SwiftUI避免 SwiftUI 中的文本抖动
【发布时间】:2020-01-15 07:43:57
【问题描述】:

有什么办法可以避免下面的晃动吗?代码是这样的:

Text(format: "%02d:%02d", hours, minutes)
    .frame(width: 100, alignment: .trailing)

(框架比字符串大)

注意事项:

  • 问题是“1”比“0”细,所以当我点击01:11 之类的组合时,字符串的总长度小于(比如说)00:00,并且文本被替换。李>
  • 固定框架宽度对抖动没有影响。
  • 对齐.trailing.center 不要修复抖动。
  • 我很好奇时不时出现的...。我可以通过在String 的末尾添加一个空格来修复它,就像这样"%02d:%02d "

滑块代码(用于补全):

Slider(value: $totalTime, in: 0...9).frame(width: 150)

Slider 值到 hh:mm 的转换:

func formatTime(_ time: Float) -> String {
    let hours: Int = Int(time)
    let minutes: Int = Int(time.truncatingRemainder(dividingBy: 1.0) * 60)

    return String(format: "%02d:%02d", hours, minutes)
}

【问题讨论】:

  • 为什么不直接设置一个固定的minWidth
  • 欢迎来到 StackOverflow。你能发布一个更完整的代码sn-p吗?理想情况下,它应该是 View 中的所有内容
  • 我可以在 iTunes 等应用程序中看到同样的问题。不同之处在于它们的字体非常小,因此可能并不重要。在我的例子中,文本的字体更大,所以抖动非常明显
  • 嗨 ???? @LinusGeffarth ...是的,我尝试了 minWidth 和 width,但没有成功
  • 你总是可以使用等宽字体:P

标签: macos swiftui beta


【解决方案1】:

你可以告诉它使用这样的等宽数字:

Text(String(format: "%02d:%02d", hours, minutes))
    .font(Font.body.monospacedDigit())
    .frame(width: 100, alignment: .trailing)

您可以将“Font.body”替换为您喜欢的字体。

【讨论】:

  • 解决了可怕的抖动?‍♂️
猜你喜欢
  • 2011-09-21
  • 2011-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多