Пользовательский шрифт в 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" размер: 12], я просто получаю HelveticaNeue-Light ..

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


person the Reverend    schedule 08.07.2011    source источник


Ответы (17)


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

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

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

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

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

person Ben G    schedule 03.05.2012

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

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

person Thibault Martin-Lagardette    schedule 11.08.2011

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

person Baljeet Singh    schedule 07.10.2013

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

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

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

person TomCobo    schedule 19.05.2015
comment
Мой собственный шрифт не печатается. - person ScottyBlades; 29.05.2018

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

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

person andresousa    schedule 10.04.2013

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

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

person sho    schedule 27.01.2012

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

    [compete_Label setFont:[UIFont fontWithName:@"Helvetica-Bold" size:12]];
person vishiphone    schedule 03.05.2012
comment
Это возвращает nil, когда я пытаюсь использовать свой собственный шрифт. - person ScottyBlades; 29.05.2018

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

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

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

person Jano    schedule 08.07.2011
comment
Я пробовал с несколькими пустыми шаблонами без промедления ... Я тоже видел ссылку .. спасибо! Меня действительно беспокоит, что HelveticaNeue-UltraLightItalic действительно работает! - person the Reverend; 09.07.2011
comment
Это устарело, но я все еще здесь, поэтому, к вашему сведению, теперь правильный формат для этого - HelveticaNeue-UltraLight, см. iosfonts.com полный список. - person Andrew Plummer; 13.10.2013

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

person the Reverend    schedule 14.07.2011
comment
Тщательно рекомендуйте покупку на определенном веб-сайте. Могу сказать, что в данном случае это не реклама, но у людей возникли проблемы из-за того, что они сами ответили на свой вопрос с помощью платного решения. - person Aurum Aquila; 14.07.2011

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

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

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

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

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

person Abdul Saleem    schedule 14.06.2016

  1. Перетащите файлы шрифтов (.ttf или .otf) в пакет проекта.
  2. Затем выберите все эти шрифты ›на правой панели xcode и убедитесь, что Target membership включен.
  3. Выберите проект на панели навигатора ›выберите Build phases› в разделе Copy Bundle Resources убедитесь, что все ваши шрифты указаны в списке. Если нет, добавляйте по одному, используя значок +.
  4. Info.plist ›выберите Fonts provided by application› добавьте шрифты один за другим (например, Helvetica-Bold.ttf).
person john raja    schedule 20.04.2020

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

Грузия Грузия-жирный шрифт Грузия-жирный шрифт Грузия-курсив Грузия

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

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

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

В UIKit:

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

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

person Mahesh    schedule 04.02.2016

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

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

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

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

        UIFont.familyNames.forEach { (name) in
        print(name)
    }
person azwethinkweiz    schedule 06.11.2018

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

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

person Steven Mark Ford    schedule 20.11.2018

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

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

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

or

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

or

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

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

person Baig    schedule 26.11.2018

обратите внимание, что добавьте конец .ttf к каждому шрифту, указанному в названии приложения.

person hamed hosiny    schedule 25.12.2019

Это старый вопрос, но я хотел бы подчеркнуть, что мы должны записать имя файла шрифта С РАСШИРЕНИЕМ в info.plist. Это была моя ошибка: я пропустил расширения. Но самое интересное, что iOS успешно загрузила три шрифта даже при отсутствии расширений. После того, как я добавил расширения, были загружены все 12 шрифтов.

Хорошая статья: https://codewithchris.com/common-mistakes-with-adding-custom-fonts-to-your-ios-app/

person Alexey Domanski    schedule 28.12.2019