Пользовательский шрифт iOS в виджете «Сегодня» всегда возвращает ноль

Я пытался добавить пользовательский шрифт в свое сегодняшнее расширение, но UIFont всегда возвращает nil.

Шаги:

  1. Я добавил файл шрифта в цель Today Widget:

введите здесь описание изображения

  1. Я проверяю, был ли файл шрифта внутри пакета Today Widget:

введите здесь описание изображения

  1. Я запускаю экземпляр шрифта в TodayViewController виджета Today, но он всегда возвращает nil:
- (void)viewDidLoad {
    [super viewDidLoad];
    UIFont* ft = [UIFont fontWithName:@"octicons-local" size:20];
}

введите здесь описание изображения

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


person wj2061    schedule 22.02.2016    source источник


Ответы (5)


Возможно, это потому, что вы забыли добавить ключ в свой файл .plist.

Добавьте ключ Fonts provided by application в новую строку. Добавьте элементы для каждого добавленного вами шрифта.

person Ronak Chaniyara    schedule 22.02.2016
comment
Я думаю, что мне не нужно добавлять этот ключ в новую версию проекта, но я ошибаюсь. Спасибо. - person wj2061; 22.02.2016
comment
Большой! вы решили свою проблему :) и добро пожаловать @wj2061 - person Ronak Chaniyara; 22.02.2016

У меня была такая же проблема, и в моем случае у меня сработало добавление полного имени файла, включая расширение файла, под ключом plist Fonts provided by application. введите здесь описание изображения

person umali    schedule 09.03.2017

Я также столкнулся с этой проблемой, и я СДЕЛАЛ targeting font to my target и поместил fonts providing by application в plist. Но все еще получает ноль, когда я пытался получить шрифт.

Возможно, потому что вы используете неправильное название шрифта.

Например (также проблема, с которой я столкнулся)

Шрифт, который я перетащил в название своего проекта, trenolt.otf

Но использовать это имя UIFont(name: "trenolt", size: 14) получает ноль

И в соответствии с Добавление пользовательского шрифта в ваше приложение по документации разработчика

Я распечатываю все семейства шрифтов и названия

for family in UIFont.familyNames.sorted() {
  let names = UIFont.fontNames(forFamilyName: family)
  print("Family: \(family) Font names: \(names)")
}

Затем я попадаю в консоль

["TruenoLt", "TruenoRg"]

А теперь используйте печатное имя

UIFont(name: "TruenoLt", size: 14)

Получает

<UICTFont: 0x7fbc39a168b0> font-family: "Trueno"; font-weight: normal; font-style: normal; font-size: 14.00pt
person stan liu    schedule 22.05.2018

У меня была такая же проблема, и я решил ее установкой шрифтов. Итак, вот шаги:
Щелкните правой кнопкой мыши файл .otf в Project Navigator-> Нажмите «Показать в Finder» -> дважды щелкните шрифт в окне Finder, и вы увидите кнопку «Установить» в правом нижнем углу, нажмите «Установить», а затем проверьте свое приложение.

Надеюсь, это сработает.

person Milan Gupta    schedule 22.02.2016

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

В то время как шрифты работали в приложении, они не работали в расширении, что вызывало сбой, потому что

UIFont(name: name.rawValue, size: size)

вернулся nil.

Шрифты были в файле Info.plist самого приложения, но не в файле Info.plist расширения приложения. Поэтому мне пришлось вручную добавить строку в Info.plist расширения с ключом Fonts provided by application и ввести все шрифты из файла Info.plist приложения, пока они не совпадут. Тогда это сработало для меня.

person Yasin Mantas    schedule 15.05.2018