Пользовательский шрифт в IOS не работает - PullRequest
42 голосов
/ 09 июля 2011

Я хочу использовать HelveticaNeue-UltraLight в своем приложении ios.Я добавляю файл шрифта в качестве ресурса в свой проект и добавляю ключ «Шрифты, предоставляемые приложением» в файл plist.Имя файла - HelveticaNeue.dfont, и я добавил его в массив ключей.

Когда я проверяю доступные шрифты, я вижу его сейчас ...

  NSArray *fonts = [UIFont fontNamesForFamilyName:@"Helvetica Neue"];

for(NSString *string in fonts){
    NSLog(@"%@", string);
}

1-07-08 17:32:57.866 myApp[5159:207] HelveticaNeue-Bold
2011-07-08 17:32:57.866 myApp[5159:207] HelveticaNeue-CondensedBlack
2011-07-08 17:32:57.867 myApp[5159:207] HelveticaNeue-Medium
2011-07-08 17:32:57.867 myApp[5159:207] HelveticaNeue
2011-07-08 17:32:57.868 myApp[5159:207] HelveticaNeue-Light
2011-07-08 17:32:57.868 myApp[5159:207] HelveticaNeue-CondensedBold
2011-07-08 17:32:57.868 myApp[5159:207] HelveticaNeue-LightItalic
2011-07-08 17:32:57.869 myApp[5159:207] HelveticaNeue-UltraLightItalic
2011-07-08 17:32:57.869 myApp[5159:207] HelveticaNeue-UltraLight // HERE IT IS!
2011-07-08 17:32:57.869 myApp[5159:207] HelveticaNeue-BoldItalic
2011-07-08 17:32:57.870 myApp[5159:207] HelveticaNeue-Italic

Но когдаЯ пытаюсь получить его с [UIFont fontWithName: @ "HelveticaNeue-UltraLight" size: 12] Я просто получаю HelveticaNeue-Light ..

Я не получаю ошибок или предупреждений.Помогите пожалуйста!

Ответы [ 14 ]

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

В дополнение к хорошо объясненному ответу @ Ben , если вы все еще не получаете свои шрифты, просто используйте или назначьте свой шрифт любому Label в одном из Storyboard, начать получать, используя этот код

Если вы по-прежнему не можете получить шрифт с помощью [UIFont fontWithName:@"Font-Regular" size:11]; В именовании должна быть проблема. Остановитесь на любой точке останова в отладчике и отладьте ее, используя другие имена, и посмотрите, какой po печатает объект, который не является nil

po [UIFont fontWithName: @ " FontRegular " размер: 11];

или

po [UIFont fontWithName: @ " Шрифт Regular " размер: 11];

или

po [UIFont fontWithName: @ " Font-Regular " размер: 11];

Вы получите <UICTFont: 0x7fe2044021d0> font-family: "Interstate-Regular"; font-weight: normal; font-style: normal; font-size: 11.00pt за фактическое имя шрифта, в противном случае вы получите nil

0 голосов
/ 20 ноября 2018

Еще одна вещь, которую нужно проверить, находится на Mac: откройте приложение Font Book. Затем перейдите файл -> проверка файла и откройте шрифт. Если что-то не работает (даже с предупреждением), iOS обычно отклоняет загрузку шрифта в приложении без ошибок.

Если это так, то вы можете исправить ошибки, открыв шрифт в бесплатном приложении «Typelight» и сохранив шрифт «Сохранить как».

0 голосов
/ 06 ноября 2018

В дополнение к:

  • добавление имен файлов шрифтов в список info.plist в разделе «Шрифты, предоставляемые приложением»
  • добавление фактических файлов в проект.

Вы также должны убедиться, что в Цели -> Фазы сборки -> Копировать ресурсы пакета есть фактические имена файлов пользовательских шрифтов.

Чтобы проверить, появились ли они, вы можете сделать что-то вроде:

        UIFont.familyNames.forEach { (name) in
        print(name)
    }
0 голосов
/ 04 февраля 2016

Чтобы использовать пользовательские шрифты в iOS, просто добавьте свои шрифты, перетаскивая их в свой проект.Упомянуть массив имен шрифтов с расширением в Info.plist с ключом «Шрифты, предоставляемые приложением».Затем напечатайте все названия семейств шрифтов, используя следующий код:

for (NSString* family in [UIFont familyNames])

{

    DebugLog(@"FONT FAMILY: %@", family);

    for (NSString *name in [UIFont fontNamesForFamilyName: family])
    {
        DebugLog(@"  %@", name);
    }
}

Печать консоли:

Arial Hebrew ArialHebrew-Bold ArialHebrew-Light ArialHebrew

Calibri Calibri-Bold Calibri

Грузия Грузия-BoldItalic Грузия-Bold Грузия-курсив Грузия

Затем с консоли вы получите фактический шрифт-имена (как указано выше).Используйте код ниже для создания шрифта -

В основном тексте:

CTFontRef fontRef = CTFontCreateWithName((CFStringRef)fontName, fontSize, NULL);

В UIKit:

UIFont *font = [UIFont fontWithName:fontName size:10];

Примечание: здесь fontName = @ "Calibri-Bold" - этобез расширения.

...