2015-11-19 502 views
6

我有一个UILabel,它以格式MM:ss:SS(分钟,秒,厘秒)显示计时器的输出,但是它会从左到右“摇动”厘秒变化 - 例如,“11”比“33”窄。iOS在数字变化时防止计时器UILabel'抖动'

有什么办法可以缓解吗?我尝试过将它定中心,给它一个固定的宽度,但他们似乎没有帮助。

+0

给一个具有最高可能性的标签的固定宽度约束。因为前33:33:33应该完全包含在其中。给标签一些背景颜色。它会在一定程度上解决你的问题 –

+1

使用textkit,你可以指定所有的数字应该是相等的宽度。 – milo526

回答

10

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

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

但是,我怀疑是否有Impact的等宽变体。它不适合你的目的。

+0

并且这也适用于自定义字体吗?在这种情况下,我正在使用'Impact' –

+0

这正是我的评论意思,只是找不到足够快的速度;) – milo526

+1

@ChrisByatt对于没有单声道间隔数字设置的字体,这不起作用。 – milo526

1

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

+0

只有Courier,Courier New包含在Xcode项目中。但是,这些字体每个字符都有相同的宽度。不错。 – coolcool1994