【问题标题】:Determine font size or scale of a UILabel确定 UILabel 的字体大小或比例
【发布时间】:2020-11-18 12:49:35
【问题描述】:

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

GIF of issue

我怎样才能做到这一点?

【问题讨论】:

    标签: ios swift animation uilabel font-size


    【解决方案1】:

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

     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)
    }
    

    【讨论】:

    • 谢谢!最终实现如下: let size = calculateOptimalFontSize(textLength: CGFloat(titleText.count), boundingBox: self.titleLabel.bounds) titleLabel.font = UIFont.systemFont(ofSize: size, weight: .black) 实现了 calculateOptimalFontSize。像魅力一样工作!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 2017-09-01
    • 1970-01-01
    • 2015-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多