16

我想使用 SF 的等宽数字字体通过如下更改字体在文本字段中显示整数:

textField.font = UIFont.monospacedDigitSystemFont(textField.font!.pointSize, weight: UIFont.Weight.semibold)

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

SF 等宽

对于相同数量的数字,文本的宽度显然不是恒定的,因此它正在移动所有抖动,因为文本字段被限制为下方图像的“前导”和“尾随”。 为什么会出现这种情况以及如何解决?

另一种真正的等宽字体,如“Menlo”,表现正确:

门洛

4

4 回答 4

9

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

我在这一点上的临时解决方案是

  • 设置textField.adjustsFontSizeToFitWidthfalse
  • 再次设置等宽字体(因为它被 adjustsFontSizeToFitWidth 的设置器以某种方式覆盖)
  • 开始修改文字
  • 完成后再次设置textField.adjustsFontSizeToFitWidthtrue正确处理用户输入

这不是我最初想要的,但它可以作为一种解决方法

在此处输入图像描述

于 2016-07-01T18:20:42.013 回答
2

我有一个使用“调整以适应”选项的项目,如果我didSet为标签插座设置等宽属性,它似乎在 Xcode 8 Beta 3 中对我有用。

@IBOutlet weak var textLabel: UILabel! {
    didSet {
        textLabel = UIFont.monospacedDigitSystemFont(ofSize: textLabel!.pointSize, weight: UIFontWeightRegular)
    }
}
于 2016-08-01T18:32:05.787 回答
0

我遇到了同样的问题,并且设置代码有效。为 Swift 4 更新:

@IBOutlet weak var textLabel: UILabel! {
    didSet {
        label.font = UIFont.monospacedDigitSystemFont(ofSize: textLabel!.font!.pointSize, weight: UIFont.Weight.regular)
    }
}
于 2018-01-21T05:43:21.540 回答
0

就我而言,我将fontUILabel 的属性设置为等宽数字字体并attributedText用于设置文本。这在 iOS 9 中有效,但在 iOS 10 中中断。解决方法是在属性字符串中显式设置字体属性。

于 2017-01-10T00:09:59.340 回答