Я использую TextStyles
в своем приложении для поддержки динамических шрифтов.У меня есть задача изменить шрифт для каждого TextStyle
.Так, например, TextStyle.body
должно быть MyAwesomeBODYFont , а TextStyle.headline
должно быть MyAwesomeHeadlineFont .И это для всего приложения.Установка шрифта для всего приложения не будет работать, потому что мне нужно несколько шрифтов для разных стилей.
Можно ли как-то переопределить эти TextStyles
с помощью пользовательских шрифтов для всего приложения, а не длякаждая метка отдельно?
Что я пробовал:
Настройка шрифта для appearance
прокси UILabel
в целом работает нормально:
let labelAppearance = UILabel.appearance()
let fontMetrics = UIFontMetrics(forTextStyle: .body)
labelAppearance.font = fontMetrics.scaledFont(for: myAwesomeBodyFont)
Но это переопределяет все метки, независимо от того, какие TextStyle
они используют.
После этого я пытался проверить TextStyle
, но он вылетает с исключением нулевого указателя для шрифта UILabel.appearance ().даже не переходите в блок if.
let labelAppearance = UILabel.appearance()
if let textStyle = labelAppearance.font.fontDescriptor.object(forKey: UIFontDescriptor.AttributeName.textStyle) as? UIFont.TextStyle {
// this would be the place to check for the TextStyle and use the corresponding font
let fontMetrics = UIFontMetrics(forTextStyle: textStyle)
labelAppearance.font = fontMetrics.scaledFont(for: mayAwesomeBodyFont)
}
Поскольку внешний вид UILabel не имеет набора font
.