避免 SwiftUI 中的文本抖动
Avoid Text jiggling in SwiftUI
有什么办法可以避免下面的抖动吗?代码是这样的:
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)
滑块值到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)
}
您可以像这样告诉它使用等宽数字:
Text(String(format: "%02d:%02d", hours, minutes))
.font(Font.body.monospacedDigit())
.frame(width: 100, alignment: .trailing)
您可以将 "Font.body" 替换为您喜欢的字体。
有什么办法可以避免下面的抖动吗?代码是这样的:
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)
滑块值到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)
}
您可以像这样告诉它使用等宽数字:
Text(String(format: "%02d:%02d", hours, minutes))
.font(Font.body.monospacedDigit())
.frame(width: 100, alignment: .trailing)
您可以将 "Font.body" 替换为您喜欢的字体。