UIFont.monospacedDigitSystemFontOfSize()不是真的等宽?

M.J*_*J.K 11 fonts monospace ios swift

我想使用SF的等宽数字字体在文本字段中显示整数,方法是更改​​其字体,如下所示:

textField.font = UIFont.monospacedDigitSystemFontOfSize(textField.font!.pointSize, weight: UIFontWeightSemibold)

但是,如果我将文本字段的文本设置为60Hz频率,则结果如下:

SF等宽

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

另一个真正的等宽字体,如"Menlo",表现正常:

门罗

M.J*_*J.K 6

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

我目前的临时解决方案是

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

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

在此处输入图片说明

  • 赞成我的回答不会杀死你。我花了一些时间 我什至做了一个完整的项目来证明“调整以适应”是问题所在。如果您不奖励别人,人们将不会有任何动机来帮助您。 (3认同)