如何为可访问性的动态文本大小调整创建自定义UILabel

时间:2018-12-28 20:44:20

标签: ios swift uilabel

我有一个自定义UILabel类,该类使用用户通过“设置”>“常规”>“辅助功能”>“较大的文本”选择的字体规格和大小自动缩放字体。

import UIKit

class AccessibilityLabel: UILabel {

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

        font = UIFontMetrics.default.scaledFont(for: font)
        adjustsFontForContentSizeCategory = true
    }
}

在我们现有的相当大的项目中,这很好用。

无效的地方是在代码中设置字体的地方。在代码中设置字体后,它将消除缩放。我们可以 浏览并更改所有设置字体的代码,以缩放字体。也许这是最好/唯一的方法。

但是我想知道是否有人知道我可以覆盖font的{​​{1}}属性的方法,以便即使没有缩放它也可以缩放它,因此不会产生无限循环。基本上,有些解决方案使我们不必遍历现有代码并更新多个位置。只需在一个地方(在UILabel中)进行更改即可。

谢谢!

1 个答案:

答案 0 :(得分:0)

这是我在一个仅包含一个标签的空白项目 {Xcode 11,iOS 13} 中所做的事情:

class AccessibilityLabel: UILabel {

    private var _font: UIFont?
    override var font: UIFont? {
        get { return _font }
        set { _font = UIFontMetrics.default.scaledFont(for: newValue!) }
    }

    required init?(coder: NSCoder) {
        super.init(coder: coder)

        self.adjustsFontForContentSizeCategory = true
    }
}

然后,我在ViewController中以编程方式更改了字体,如下所示:

//@IBOutlet weak var myLabel: AccessibilityLabel!
myLabel.font = UIFont(name: "NoteWorthy", size: 20.0)

...此后以不同大小的文本显示结果: enter image description here enter image description here enter image description here

如果我完全理解您的问题,我认为该解决方案应该可以帮助您仅在一个地方进行UILabel自定义,而无需通过现有代码

...否则,请让我知道是否有我误解的东西。