我有一个UILabel
,它以MM:ss:SS
(分钟,秒,厘秒)的格式显示定时器的输出,但它"震动"从左到右随着厘秒的宽度变化 - " 11"比#33; 33"更窄例如。
有什么办法可以减轻这种影响吗?我试过把它居中,给它一个固定的宽度,但它们似乎没什么帮助。
答案 0 :(得分:17)
自iOS 9.0起,系统字体使用比例数字。如果您想要等宽数字,可以使用+[UIFont monospacedDigitSystemFontOfSize:weight:]
获得变体字体。这仅适用于系统字体。
如果您想使用其他字体,您可以尝试使用等宽字体,但可能没有。给定UIFont
,您可以请求其fontDescriptor
,然后使用-[UIFontDescriptor fontDescriptorWithSymbolicTraits:]
和UIFontDescriptorTraitMonoSpace
请求使用等宽字体(不仅仅是数字)的类似字体描述符。然后,您可以通过将新字体描述符传递给+[UIFont fontWithDescriptor:size:]
来创建新字体。
但是,我怀疑是否存在Impact的等宽变体。它不适合您的目的。
答案 1 :(得分:2)
使用等宽字体,也称为固定间距,固定宽度或非比例字体,是一种字体,其字母和字符各自占据相同数量的水平空间。等宽字体的示例包括Courier,Courier New,Lucida Console,Monaco和Consolas
答案 2 :(得分:2)
我遇到了同样的问题。 @KenThomases回答有效。这是Swift版本:
<div class="flex-container">
<div class="row">
<div class="navBar">
<a class="bar title" href="#">title</a>
<a class="bar right balance" href="#">balance</a>
<a class="bar right" href="#">three</a>
<a class="bar right" href="#">two</a>
<a class="bar right" href="#">one</a>
</div>
<div>
<div class="flex-item">element one</div>
<div class="flex-item ad">element two</div>
</div>
<div>
<a class="bottom" href="#">placeholder</a>
</div>
</div>
</div>
即:
// replace whatever font your using with this font instead to stop the shaking
UIFont.monospacedDigitSystemFont(ofSize: 19, weight: UIFont.Weight.regular)
仅供参考,还有其他yourLabel.font = UIFont.monospacedDigitSystemFont(ofSize: 19, weight: UIFont.Weight.regular)
个权重:
UIFont.Weight
,.black
,.bold
,.heavy
,.light
,.medium
,.regular
,.semibold
,.thin
According to this other answer以下字体是系统生成的字体,也是等宽,所以它们也不会动摇:
信使
信使粗体
信使BoldOblique
信使斜
CourierNewPS-BoldItalicMT
CourierNewPS-BoldMT
CourierNewPS-ItalicMT
CourierNewPSMT
门洛帕克-粗体
门洛帕克-BOLDITALIC
门洛帕克-斜体
门洛帕克正规
即:
.ultraLight
如果你只使用数字,那么 HelveticaNeue 也是等宽,它不会动摇但是有问题。使用此字体前请先阅读comments below this answer。
即:
// no shaking
yourLabel.font = UIFont(name: "Menlo-Regular", size: 19)