Как создать пользовательский UILabel для динамического изменения размера текста в Accessibility - PullRequest
0 голосов
/ 28 декабря 2018

У меня есть собственный класс UILabel, который автоматически масштабирует шрифт, используя метрику и размер шрифта, выбранные пользователем через Настройки> Общие> Специальные возможности> Увеличенный текст:

import UIKit

class AccessibilityLabel: UILabel {

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

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

В нашем существующем, довольно большомПроект, это прекрасно работает.

Где это не работает, где шрифт установлен в коде.Когда шрифт установлен в коде, он удаляет масштабирование. Мы можем пройти и изменить весь код, в котором мы установили шрифт для его масштабирования.И, возможно, это лучший / единственный способ.

Но мне было интересно, знает ли кто-нибудь, как можно переопределить свойство font для UILabel, чтобы оно масштабировало его, если оно еще не масштабировано, и нене создавать бесконечный цикл.По сути, какое-то решение, при котором нам не нужно было бы просматривать существующий код и обновлять несколько мест.Просто внесите изменения в одном месте (в UILabel).

Спасибо!

1 Ответ

0 голосов
/ 30 августа 2019

Вот что я сделал в пустом проекте {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 только в одном месте без прохождения существующего кода .

... иначе, просто дайте мне знать, если я что-то неправильно понял, пожалуйста.

...