Как настроить пользовательские UIFonts с отсутствующими / неправильными символическими чертами? - PullRequest
0 голосов
/ 21 октября 2019

У меня есть набор пользовательских граней шрифтов для семейства шрифтов BentonSans. Учитывая регулярный вес шрифта, я хотел бы получить жирную версию без указания имени или семейства, например, так:

let font = UIFont(name: "BentonSans-Regular", size: 13)!
let boldDescriptor = font.fontDescriptor
   .withSymbolicTraits(.traitBold) // nil

Однако жирная версия BentonSans не может быть найдена, предположительноиз-за того, как шрифт был создан и импортирован в UIKit. Я попытался создать новый UIFontDescriptor для каждого шрифта, но они, кажется, не знают о другом, что имеет смысл.

Я надеялся, что можно описать шрифты вручную, как это, но этоконкретный пример по умолчанию Helvetica, потому что нет семейства с именем BentonSans.

let boldDescriptor = UIFontDescriptor(fontAttributes: [
  .family: "BentonSans",
  .name: "BentonSans-Bold",
  .traits: [UIFontDescriptor.TraitKey.weight: UIFont.Weight.regular]
])

Вот то, с чем я работаю:

let customFonts = UIFont.familyNames.filter { 
   $0.hasPrefix("BentonSans")
}

for family in customFonts {
   let names = UIFont.fontNames(forFamilyName: family)
   print("\(family): \(names)")
}

// Output
// BentonSans-Regular: ["BentonSans-Regular"]
// BentonSans-Book: ["BentonSans-Book"]
// BentonSans-Bold: ["BentonSans-Bold"]
// BentonSans-Medium: ["BentonSans-Medium"]

// Expected Output
// BentonSans: ["BentonSans-Regular", "BentonSans-Book", "BentonSans-Bold", "BentonSans-Medium"]
...