确定 UILabel 的字体大小或比例

Determine font size or scale of a UILabel

我的 VC 上有一个标签 (titleLabel),动画显示一个接一个字母,直到整个字符串可见。代码如下并且正在运行:

titleLabel.text = ""
        titleLabel.alpha = 0
        var charIndex = 0.0
        let titleText = "Some App Title"
        for letter in titleText {
            Timer.scheduledTimer(withTimeInterval: (0.1 * charIndex), repeats: false) { (timer) in
                self.titleLabel.text?.append(letter)
                self.titleLabel.alpha += 0.1
            }
            charIndex += 1

        }

在较小的 iPhone 屏幕上,文本会调整其字体大小以适应动画期间的视图。每次出现最后一个字母时,您都会看到文本变小。

我的 VC 中有一个标签的副本。它不是动画。在通过自动布局调整大小后,我正在寻找一种获取有关此文本标签的信息的方法。我想知道字体大小缩小后的字体大小 and/or 比例。我想使用这些值来设置我的 titleLabel 的相应值,以便它的字体大小在动画期间不会缩小。我还不能以编程方式设置这些属性。

GIF of issue

我怎样才能做到这一点?

您可以根据标签的文字和宽度计算字体大小。

 titleLabel.text = ""
    titleLabel.alpha = 0
    var charIndex = 0.0
    let titleText = "Some App Title"
    //You can use your custom font here.
    titleLabel.font = UIFont.systemFont(ofSize: self.calculateOptimalFontSize(textLength: CGFloat(titleText.count), boundingBox: self.titleLabel.bounds))  
    for letter in titleText
    {
        Timer.scheduledTimer(withTimeInterval: (0.1 * charIndex), repeats: false)
        { (timer) in
            self.titleLabel.text?.append(letter)
            self.titleLabel.alpha += 0.1
        }
        charIndex += 1
    }

您可以创建类似的功能或扩展。

func calculateOptimalFontSize(textLength:CGFloat, boundingBox:CGRect) -> CGFloat
{
    let area:CGFloat = boundingBox.width * boundingBox.height
    return sqrt(area / textLength)
}