更改文本时 UILabel 中等宽字体的奇怪行为

Posted

技术标签:

【中文标题】更改文本时 UILabel 中等宽字体的奇怪行为【英文标题】:Strange behaviour with monospaced font in UILabel when changing text 【发布时间】:2018-02-21 12:59:04 【问题描述】:

我在使用monospacedDigitSystemFont(ofSize:weight:)时遇到了一个奇怪的问题

我的UIViewController 中有一个UISlider 和一个UILabel。标签显示滑块的当前值 + 一些描述文本。在更改滑块的值时,myLabel 的文本会左右晃动。我希望myLabel 的文本不会左右晃动,因为我使用的是monospacedDigitSystemFont(ofSize:weight:)

这是我的代码:

import UIKit

class ExampleViewController: UIViewController 
    @IBOutlet weak var myLabel: UILabel!
    @IBOutlet weak var mySlider: UISlider!

    override func viewDidLoad() 
        super.viewDidLoad()
        myLabel.font = UIFont.monospacedDigitSystemFont(ofSize: 15, weight: .bold)
    

    @IBAction func sliderChanged(_ sender: UISlider) 
        myLabel.text = String(format: "%.5f is the actual Value of the Slider", sender.value)
    

关于摇晃的 GIF:

有什么建议吗?我错过了什么吗?

【问题讨论】:

您可以右对齐您的文字以避免这种行为,这是由于您使用幻灯片时不同的文字宽度 @Y.Bonafons 这仅在描述文本位于滑块值后面时才有效。当我更改它以使滑块的值位于描述文本之前并右对齐文本时,我遇到了同样的问题。 【参考方案1】:

这是一个可怕的错误,它是由 bold 等宽字体引起的。将权重设置为常规可以解决此问题。

myLabel.font = UIFont.monospacedDigitSystemFont(ofSize: 15, weight: .regular)

如果您仍想使用粗体,请考虑使用非标准等宽字体。

【讨论】:

这行得通。非常感谢你。是否已报告此错误? @T.Werb 尚未报告 AFAIK。 我使用的是 Xcode 9.2,它在晃动。不是很重的震动,但确实如此。 NVM。当我使用手动变焦(脸非常靠近屏幕)时,我可以看到它。奇怪的。我预计震动会更大。 @vacawama 尝试screen zoom 来处理类似的情况。

以上是关于更改文本时 UILabel 中等宽字体的奇怪行为的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中更改 UILabel 文本某些部分的字体属性? [复制]

ScrollView中的UILabel sizeToFit

iOS 10中的UILabel,制作文字字体

IE 9 - 更改字体大小后文本框中的文本被截断(百分比)

如何延迟更改 tableView 中的 UILabel 文本

BlackBerry Browser:奇怪的文本换行行为