我有一个自定义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中)进行更改即可。
谢谢!
答案 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)
如果我完全理解您的问题,我认为该解决方案应该可以帮助您仅在一个地方进行UILabel自定义,而无需通过现有代码。
...否则,请让我知道是否有我误解的东西。