我想使用SF的等距数字字体通过如下更改其字体来在文本字段中显示整数:
textField.font = UIFont.monospacedDigitSystemFontOfSize(textField.font!.pointSize, weight: UIFontWeightSemibold)
但是,如果我以60Hz的频率设置文本字段的文本,则结果如下:

ios - UIFont.monospacedDigitSystemFontOfSize()不是真的等宽吗?-LMLPHP

对于相同数量的数字,文本的宽度显然不是恒定的,因此它动摇了所有的抖动,因为文本字段被约束为下面图像的“前导”和“尾随”。
为什么会这样,以及如何解决?

另一个真正的等宽字体,例如“Menlo”,其行为正确:

ios - UIFont.monospacedDigitSystemFontOfSize()不是真的等宽吗?-LMLPHP

最佳答案

因此,似乎设置文本字段的“调整以适合”选项会覆盖字体的等宽属性(即使 View 足够大以包含文本!)

我目前的临时解决方案是

  • textField.adjustsFontSizeToFitWidth设置为false
  • 再次设置等宽字体(因为adjustsFontSizeToFitWidth的setter覆盖了它)
  • 开始更改文本
  • 完成后,再次将textField.adjustsFontSizeToFitWidth设置为true,以便在用户输入
  • 上正确运行

    这不是我最初想要的,但可以解决

    ios - UIFont.monospacedDigitSystemFontOfSize()不是真的等宽吗?-LMLPHP

    关于ios - UIFont.monospacedDigitSystemFontOfSize()不是真的等宽吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38148073/

    10-09 20:59