【问题标题】:How to create a custom UILabel for Accessibility's Dynamic Text Sizing如何为可访问性的动态文本大小创建自定义 UILabel
【发布时间】:2019-05-26 14:35:13
【问题描述】:

我有一个自定义 UILabel 类,它使用用户通过设置>常规>辅助功能>更大文本选择的字体度量和大小自动缩放字体:

import UIKit

class AccessibilityLabel: UILabel {

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

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

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

它不起作用的地方是代码中设置字体的地方。当在代码中设置字体时,它会删除缩放。我们可以检查并更改我们设置字体以缩放它的所有代码。也许这是最好/唯一的方法。

但我想知道是否有人知道我可以覆盖 UILabelfont 属性的方法,以便在尚未缩放时对其进行缩放,因此不会创建无限循环。基本上,我们不必通过现有代码并更新多个位置的一些解决方案。只需在一处(在 UILabel 中)进行更改。

谢谢!

【问题讨论】:

    标签: ios swift uilabel dynamic-type-feature


    【解决方案1】:

    这是我在一个空白项目中所做的 {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,而无需通过现有代码

    ...否则,如果有什么我误解了,请告诉我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-10
      • 2014-03-03
      • 2016-01-14
      • 2018-04-22
      • 2015-01-05
      • 2014-05-04
      • 2013-01-02
      相关资源
      最近更新 更多