我有一个UILabel
以格式MM:ss:SS
(分钟,秒,厘秒)显示计时器的输出,但是随着厘秒宽度的变化,它从左到右“抖动” - 例如,“11”比“33”窄。
有什么办法可以减轻这种情况吗?我试过把它居中,给它一个固定的宽度,但他们似乎没有帮助。
我有一个UILabel
以格式MM:ss:SS
(分钟,秒,厘秒)显示计时器的输出,但是随着厘秒宽度的变化,它从左到右“抖动” - 例如,“11”比“33”窄。
有什么办法可以减轻这种情况吗?我试过把它居中,给它一个固定的宽度,但他们似乎没有帮助。
从 iOS 9.0 开始,系统字体使用比例数字。如果您想要等宽数字,可以使用变体字体获得+[UIFont monospacedDigitSystemFontOfSize:weight:]
。这仅适用于系统字体。
如果您想使用另一种字体,请尝试请求等宽变体,但可能没有。给定 a UIFont
,您可以请求它的,然后使用and请求fontDescriptor
一个类似的等宽字体描述符(不仅仅是数字)。然后,您可以通过将新字体描述符传递给.-[UIFontDescriptor fontDescriptorWithSymbolicTraits:]
UIFontDescriptorTraitMonoSpace
+[UIFont fontWithDescriptor:size:]
但是,我怀疑 Impact 是否存在等空间变体。它不适合您的目的。
我有同样的问题。@KenThomases 回答有效。这是斯威夫特版本:
// replace whatever font your using with this font instead to stop the shaking
UIFont.monospacedDigitSystemFont(ofSize: 19, weight: UIFont.Weight.regular)
IE:
yourLabel.font = UIFont.monospacedDigitSystemFont(ofSize: 19, weight: UIFont.Weight.regular)
仅供参考,还有其他UIFont.Weight
权重:
.black
, .bold
, .heavy
, .light
, .medium
, .regular
, .semibold
, .thin
,.ultraLight
根据this other answer,以下字体是系统生成的字体,它们也是等宽字体,因此它们也不会晃动:
导游
Courier-Bold
Courier-BoldOblique
Courier-Oblique
CourierNewPS-BoldItalicMT
CourierNewPS-BoldMT
CourierNewPS-ItalicMT
快递新PSMT
门罗粗体
Menlo-Bold斜体
Menlo-斜体
Menlo-Regular
IE:
// no shaking
yourLabel.font = UIFont(name: "Menlo-Regular", size: 19)
如果你只使用数字,那么HelveticaNeue也是等宽的,它不会抖动,但它是有问题的。在使用此字体之前,请阅读此答案下方的评论。
IE:
// no shaking but apparently you can only use numbers not letters
yourLabel.font = UIFont(name: "HelveticaNeue", size: 19)
使用等宽字体,也称为固定间距、固定宽度或非比例字体,是一种字体,其字母和字符各自占据相同数量的水平空间。等宽字体的示例包括 Courier、Courier New、Lucida Console、Monaco 和 Consolas