Это странно.
Это работает:
titleLabel.font = UIFont(name: "OpenSans-Regular", size: 14)
Это работает:
attributedString.addAttribute(NSFontAttributeName, value:
UIFont(name: "OpenSans-Bold", size: 18)!,
range: ((attributedString.string as NSString).range(of: "Forgot your password? Reset it here")))
Это не так. Дает сбой:
Неожиданно найдено nil при развертывании необязательного значения
attributedString.addAttribute(NSFontAttributeName, value:
UIFont(name: "OpenSans-Regular", size: 18)!,
range: ((attributedString.string as NSString).range(of: "Email or password are incorrect."))).
Первый пример показывает, что OpenSans-Regular отлично работает в приложении. (Тот же шрифт, что и в третьем примере).
Второй пример показывает, что строка с атрибутами отлично работает с пользовательским шрифтом.
Третий пример показывает, что атрибутированная строка с пользовательским шрифтом не работает.
Я дважды проверил, OpenSans-Regular я правильно скопировал в свой проект:
Каталог проекта:
Копировать ресурсы пакета:
Информация.plist:
UIFont(name: "OpenSans-Bold", size: 18)
, вероятно,nil
из-за того, что имя пользовательского шрифта неверно, или пользовательский шрифт не поддерживается приложением. - person holex   schedule 23.01.2018if-let
и посмотрите, какой результат вы получите - person Krunal   schedule 23.01.2018UIFont(name:size:)
, часто отличается от базового имени файла ttf. - person rmaddy   schedule 23.01.2018!
, говоря Crash if nil, в то время как вы не установили шрифт в своей метке (что, как я ожидаю, не сработало). - person Larme   schedule 23.01.2018OpenSans
, потому что это постскриптумное имя шрифта (прочитайте ответ, используйте FontBook.app на своем Mac), что я тоже предложил. И это явно одно и то же решение по той же причине, по которой используется OpenSans. Тогда это дубликат. - person Larme   schedule 23.01.2018