Ios UIFont.monospacedDigitSystemFontOfSize()不是真正的单间距?

Ios UIFont.monospacedDigitSystemFontOfSize()不是真正的单间距?,ios,swift,fonts,monospace,Ios,Swift,Fonts,Monospace,我想使用SF的单间隔数字字体,通过如下更改字体,在文本字段中显示整数: textField.font=UIFont.monospacedDigitSystemFontOfSize(textField.font!.pointSize,weight:UIFontWeightSemibold) 但如果我将文本字段的文本设置为60Hz频率,则结果如下: 对于相同数量的数字,文本的宽度显然不是恒定的,因此它移动时非常不平稳,因为文本字段被限制为下面图像的“前导”和“尾随”。 为什么会出现这种情况以及如何

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

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

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

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

另一种真正的单间距字体(如“Menlo”)表现正常:


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

在这一点上,我的临时解决办法是

  • 设置
    textField。将ntsizetofitwidth调整为
    false
  • 再次设置单间距字体(因为它被adjustsFontSizeToFitWidth的setter以某种方式覆盖)
  • 开始更改文本
  • 完成后,设置
    textField。再次将ntsizetofitwidth调整为
    true
    ,以便在用户输入时正确操作
这不是我最初想要的,但它可以作为一种解决方法


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

@IBOutlet weak var textLabel: UILabel! {
    didSet {
        textLabel = UIFont.monospacedDigitSystemFont(ofSize: textLabel!.pointSize, weight: UIFontWeightRegular)
    }
}

在我的例子中,我将UILabel的
font
属性设置为单间隔数字字体,并使用
attributedText
设置文本。这在iOS 9中起作用,但在iOS 10中被打破。解决方法是在属性字符串中显式设置字体属性。

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

@IBOutlet weak var textLabel: UILabel! {
    didSet {
        label.font = UIFont.monospacedDigitSystemFont(ofSize: textLabel!.font!.pointSize, weight: UIFont.Weight.regular)
    }
}

同样的事情也发生在宽度受限的
UILabel上(启用了“调整以适应”)您使用的是Xcode 8和Swift 3,我想是@code不同的否,Xcode 7.3.1和Swift2@matt你不是真正的“让我这么做的人”,我发现“调整以适应”改变了整个字体,而不是大小。但我仍然非常感谢你的努力!请注意,这不是公认的答案,我原来的问题仍然存在。我只是想回答问题的来源,并提出一个可选的解决方案。我正在考虑给AppleIt写一份bug报告,如果你对我的答案投赞成票的话,你是不会死的。我花时间在这上面;我甚至做了一个完整的项目来证明“适应”是问题所在。如果你不奖励他们,他们将不会有任何动机来帮助你。在Xcode 9中禁用“调整以适应”为我解决了这个问题。谢谢,我将尝试一下!但它不应该是“textlab.font=”和“textlab!.font!.pointSize”吗?