Пользовательский шрифт в swift 4 приводит к фатальной ошибке: неожиданно обнаружен ноль при развертывании необязательного значения - PullRequest
1 голос
/ 03 апреля 2019

Я должен добавить собственный шрифт в свое приложение.Я добавил шрифты в свой проект и перечислил infolist.

 enum Proxima: String {
        case regular = "Regular"
        func font(size: CGFloat) -> UIFont {
            return UIFont(name: "Proxima-\(rawValue)", size: size)!
        }
    }

Неустранимая ошибка: неожиданно обнаружен ноль при развертывании необязательного значения при вызове

self.headTitle.font = UIFont.Proxima.regular.font(size: 30)

ОБНОВЛЕНИЕ

Я добавил цель, а также проверил, что ресурсы пакета копирования все верны, но все равно я получил ту же ошибку.

enter image description here enter image description here

info.plist

Ответы [ 5 ]

1 голос
/ 03 апреля 2019

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

Пример:

@IBOutlet weak var label1: UILabel!
enum OpenSans: String {
    case regular = ""
    case semiBold = "-Semibold"
    func font(size: CGFloat) -> UIFont {
        return UIFont(name: "OpenSans\(rawValue)", size: size)!
    }
}

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib..

    label1.font = OpenSans.regular.font(size: 30.0)

    label1.font = OpenSans.semiBold.font(size: 30.0)
}

Если проблема не устраненаПожалуйста, обратитесь к этому демонстрационному проекту

FontDemo

Надеюсь, это поможет.

0 голосов
/ 05 июля 2019

Убедитесь, что ваши файлы добавлены к вашей цели

Также не забудьте добавить их в раздел «Шрифт, предоставленный приложением» Info.plist

0 голосов
/ 03 апреля 2019

Запустите следующий код, чтобы проверить доступный шрифт в вашем проекте.

for fontFamilyName in UIFont.familyNames{
    for fontName in UIFont.fontNames(forFamilyName: fontFamilyName){
        print("Family: \(fontFamilyName)     Font: \(fontName)") 
    }
}

См. Вывод в вашей консоли, все доступные шрифты напечатаны здесь, проверьте фактическое имя шрифта предоставленных шрифтов.

И используйте это имя шрифта для UIFont(name: "FontName", size: 15)

0 голосов
/ 03 апреля 2019

Попробуйте это

  • Добавьте пользовательские файлы в свой проект, а также проверьте это в разделе Копировать пакетный ресурс на этапе сборки

  • Используя эту функцию, вы можете проверить шрифты, доступные в вашем проекте. добавьте эту функцию в appDelegate и вызовите ее из didFinsihLaunching.

    func printFonts() {
      let fontFamilyNames = UIFont.familyNames
      for familyName in fontFamilyNames {
          print("------------------------------")
          print("Font Family Name = [\(familyName)]")
          let names = UIFont.fontNames(forFamilyName: familyName)
          print("Font Names = [\(names)]")
        }
      }
    
  • Если ваш собственный шрифт доступен в списке печатных шрифтов, вы можете использовать.

0 голосов
/ 03 апреля 2019

Похоже, вы не добавили шрифты в свою цель

Выберите свои шрифты и на правой панели отметьте цель

enter image description here

...