15

我有一个UILabel以格式MM:ss:SS(分钟,秒,厘秒)显示计时器的输出,但是随着厘秒宽度的变化,它从左到右“抖动” - 例如,“11”比“33”窄。

有什么办法可以减轻这种情况吗?我试过把它居中,给它一个固定的宽度,但他们似乎没有帮助。

4

3 回答 3

25

从 iOS 9.0 开始,系统字体使用比例数字。如果您想要等宽数字,可以使用变体字体获得+[UIFont monospacedDigitSystemFontOfSize:weight:]。这仅适用于系统字体。

如果您想使用另一种字体,请尝试请求等宽变体,但可能没有。给定 a UIFont,您可以请求它的,然后使用and请求fontDescriptor一个类似的等宽字体描述符(不仅仅是数字)。然后,您可以通过将新字体描述符传递给.-[UIFontDescriptor fontDescriptorWithSymbolicTraits:]UIFontDescriptorTraitMonoSpace+[UIFont fontWithDescriptor:size:]

但是,我怀疑 Impact 是否存在等空间变体。它不适合您的目的。

于 2015-11-19T09:59:53.077 回答
10

我有同样的问题。@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)
于 2018-06-15T03:06:28.563 回答
3

使用等宽字体,也称为固定间距、固定宽度或非比例字体,是一种字体,其字母和字符各自占据相同数量的水平空间。等宽字体的示例包括 Courier、Courier New、Lucida Console、Monaco 和 Consolas

于 2015-11-19T09:59:17.790 回答