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