Включение шрифта маленьких заглавных букв в UILabel - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь включить функцию маленьких заглавных букв в UILabel.Этот вопрос задавался много раз прежде, и ответ довольно прост:

override func awakeFromNib() {
  super.awakeFromNib()

  let fontSize: CGFloat = 24
  let descriptor = UIFont
    .systemFont(ofSize: 24)
    .fontDescriptor
    .addingAttributes([
      UIFontDescriptor.AttributeName.featureSettings: [
        UIFontDescriptor.FeatureKey.featureIdentifier: kLowerCaseType,
        UIFontDescriptor.AttributeName.featureSettings: kLowerCaseSmallCapsSelector
      ]
    ])

  titleLabel.font = UIFont(descriptor: descriptor, size: fontSize)
  titleLabel.text = "Welcome"
}

Этот код, однако, не работает, и я не понимаю, почему.У меня было несколько идей:

  1. Шрифт может не содержать глифы маленьких заглавных букв.Я сомневаюсь, что это проблема, так как я использую системный шрифт.Я пытался использовать Helvetica Neue на всякий случай, но безуспешно.
  2. Шрифты с маленькими заглавными буквами не поддерживаются при задании текста со свойством UILabel.text.Однако использование свойства UILabel.attributedText вместо этого не решает проблему.
  3. Шрифты с маленькими заглавными буквами UILabel вообще не поддерживаются.Я пробовал UITextView, но результат тот же.
  4. Это может быть проблема с iOS 12, но проблема воспроизводится и на iOS 11.4.

Есть личто-нибудь еще, что я мог бы пропустить?

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Я решил попробовать свой код в новом проекте, и это сработало.Затем я удалил titleLabel из пера и добавил новый, после чего мой код работал и в текущем проекте.

Похоже, это была какая-то странная проблема с кэшированием или какая-то настройка в предыдущемtitleLabel, который не был совместим со шрифтами с маленькими заглавными буквами.

0 голосов
/ 25 октября 2018

Проведя несколько тестов и ссылаясь на эту суть (https://gist.github.com/juliensagot/8fc3e2e6b5ad1e14b3ecb394a417b010),, кажется, вам нужно установить ОБА верхний и нижний регистр, иначе маленькие заглавные буквы не работают, по крайней мере,в симуляторе под iOS 12. Протестировано с парой разных шрифтов.

let fontSize: CGFloat = 24.0
let fontDescriptor = UIFont.systemFont(ofSize: fontSize, weight: .medium).fontDescriptor

let upperCaseFeature = [
    UIFontDescriptor.FeatureKey.featureIdentifier : kUpperCaseType,
    UIFontDescriptor.FeatureKey.typeIdentifier : kUpperCaseType
 ]

let lowerCaseFeature = [
    UIFontDescriptor.FeatureKey.featureIdentifier : kLowerCaseType,
    UIFontDescriptor.FeatureKey.typeIdentifier : kLowerCaseSmallCapsSelector
]

let features = [upperCaseFeature, lowerCaseFeature]
let additions = fontDescriptor.addingAttributes([.featureSettings: features])

label.font = UIFont(descriptor: additions, size: fontSize)
label.text = "Hello There!"

Скриншот с симулятора:

Screenshot from the simulator

...