it-roy-ru.com

Пользовательский шрифт в IOS не работает

Я хочу использовать 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 ..

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

40
the Reverend

Файл нужно не только добавить в проект, но и добавить его к цели. 

Иногда (как в моем случае), при перетаскивании файла «.ttf» в Xcode «добавить к цели» не проверяется. Это означает, что файл фактически видим в вашем проекте, но он не встроен в приложение.

Чтобы убедиться, что это:

  • Нажмите на название проекта (левая панель) 
  • Затем на цель (средняя панель)
  • Затем «Фазы сборки» (третья вкладка на правой панели) 
  • Затем «Копирование ресурсов Bundle»

Вы должны увидеть файл шрифта в этом списке.

99
Ben G

Я думаю, у вас та же проблема, что и у меня: в iOS есть ошибка, из-за которой она не может использовать более 2 шрифтов из одного семейства.

Для получения подробной информации и решения см. Сообщение в блоге: http://www.pixeldock.com/blog/uifont-problem-when-using-more-than-2-custom-fonts-of-the-same-font-family/

19
Thibault Martin-Lagardette

после добавления файла шрифта в Bundle «Шрифт, предоставляемый приложением» property нажмите стрелку раскрывающегося списка и введите имя шрифта с расширением

9
Baljeet Singh

Откройте приложение Font Book. Если вы установили шрифты самостоятельно, перейдите к пользователю, найдите нужные шрифты и используйте PostScript-имя шрифта в вашем проекте xcode.

Он должен работать даже для разных вариантов шрифта одного и того же семейства.

8
andresousa

Он работает с разными вариантами одного и того же шрифта (даже в IOS 8). Я опубликую свою ошибку на тот случай, если у кого-то возникнет такая же проблема ... Я использовал имя шрифта вместо имени шрифта . Полезное решение - распечатать все доступные шрифты и найти тот, который был у меня. с помощью. В Swift было бы:

for fontFamilyNames in UIFont.familyNames {
    for fontName in UIFont.fontNames(forFamilyName: fontFamilyNames) {
        print("FONTNAME:\(fontName)")
    }
}

Я нашел этот полезный урок в: Код с Крисом

7
TomCobo

Хотя это, вероятно, не поможет ОП, это может быть полезно для других. 

В iOS 5 автоматически включается Helvetica Neue; Вам не нужно добавлять этот пользовательский шрифт в комплект. Возможно даже использовать это семейство шрифтов непосредственно из Interface Builder, что очень удобно.

3
sho

Попробуйте это, это также будет полезно для вас.

    [compete_Label setFont:[UIFont fontWithName:@"Helvetica-Bold" size:12]];
2
vishiphone

В итоге я купил шрифт Helvetica Neue UltraLight у стороннего производителя, добавил его без проблем.

1
the Reverend

Попробуйте с пробелами:

[UIFont fontWithName:@"Helvetica Neue UltraLight" size:12];

Смотрите Некоторые шрифты не отображаются?

1
Jano

Потратив часы, я узнал, что имя для шрифта, который нам нужно добавить, это не имя файла шрифта, а фактическое имя шрифта. Я пытался включить файл шрифта bonveno.ttf . Я включил имя файла вместе с расширением в info.plist и смог увидеть шрифт в списке Copy Bundle Resources . Мой код был похож

self.label.font = [UIFont fontWithName:@"bonveno" size:30];

это было причиной проблемы. Затем я дважды щелкнул файл шрифта из Finder , чтобы увидеть предварительный просмотр шрифта. Тогда я заметил имя шрифта в окне предварительного просмотра как BonvenoCF . Поэтому я добавил это имя в коде, как

self.label.font = [UIFont fontWithName:@"BonvenoCF" size:30];

Работал как шарм !! Не могу жить без этого милого шрифта в моих приложениях.

1
Sayka

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

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

po [UIFont fontWithName: @ "FontRegular" size: 11];

или же

po [UIFont fontWithName: @ "Font Regular" size: 11];

или же

po [UIFont fontWithName: @ "Font-Regular" size: 11];

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

0
Baig

Чтобы использовать пользовательские шрифты в 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

Калибри Калибри-Болд Калибри

Грузия Грузия-BoldItalic Грузия-Bold Грузия-Italic Грузия

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

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

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

В UIKit:

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

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

0
Mahesh

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

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

0
Steven Mark Ford

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

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

Вы также должны убедиться, что в Targets -> Build Phase -> Copy Bundle Resources есть фактические имена файлов из пользовательских шрифтов. 

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

        UIFont.familyNames.forEach { (name) in
        print(name)
    }
0
azwethinkweiz