Подтвердить что ты не робот

UIFont fontWithName возвращает nil

В моем info.plist я добавил ключ "Шрифты, предоставленные приложением", и добавил EdwardianScriptITCStd.otf enter image description here

Но, когда я пытаюсь получить этот шрифт, он возвращает nil:

NSLog(@"%@", [UIFont fontWithName:@"EdwardianScriptITCStd" 
                                size:16.0f]);

Я напечатал семейства шрифтов, используя [UIFont familyNames], и он тоже не существует:

(
    Thonburi,
    "Snell Roundhand",
    "Academy Engraved LET",
    "Marker Felt",
    "Geeza Pro",
    "Arial Rounded MT Bold",
    "Trebuchet MS",
    Arial,
    Marion,
    "Gurmukhi MN",
    "Malayalam Sangam MN",
    "Bradley Hand",
    "Kannada Sangam MN",
    "Bodoni 72 Oldstyle",
    Cochin,
    "Sinhala Sangam MN",
    "Hiragino Kaku Gothic ProN",
    Papyrus,
    Verdana,
    "Zapf Dingbats",
    Courier,
    "Hoefler Text",
    "Euphemia UCAS",
    Helvetica,
    "Hiragino Mincho ProN",
    "Bodoni Ornaments",
    "Apple Color Emoji",
    Optima,
    "Gujarati Sangam MN",
    "Devanagari Sangam MN",
    "Times New Roman",
    Kailasa,
    "Telugu Sangam MN",
    "Heiti SC",
    "Apple SD Gothic Neo",
    Futura,
    "Bodoni 72",
    Baskerville,
    "Chalkboard SE",
    "Heiti TC",
    Copperplate,
    "Party LET",
    "American Typewriter",
    "Bangla Sangam MN",
    Noteworthy,
    Zapfino,
    "Tamil Sangam MN",
    "DB LCD Temp",
    "Arial Hebrew",
    Chalkduster,
    Georgia,
    "Helvetica Neue",
    "Gill Sans",
    Palatino,
    "Courier New",
    "Oriya Sangam MN",
    Didot,
    "Bodoni 72 Smallcaps"
)

Что мне не хватает? Спасибо!

4b9b3361

Ответ 1

Мои комментарии начали длиться, поэтому я решил отправить ответ вместо:)

  • Пользовательские шрифты поддерживаются только в iOS версии 3.2 и выше, поэтому убедитесь, что настройка сборки целевого развертывания не возвращается дальше, чем версия 3.2.

  • Убедитесь, что шрифт включен в цель сборки (на этапе сборки "Ресурсы копирования ресурсов" )

  • Проверьте исходное значение ключа для "Шрифты, предоставленные приложением", чтобы убедиться в его правильности. При просмотре *.plist в Xcode щелкните правой кнопкой мыши и выберите "Show Raw Keys/Values", затем проверьте, что ключ UIAppFonts.

  • Я считаю, что для iOS требуется имя PostScript для шрифта при использовании fontWithName: size:, который вы можете найти/проверить, открыв шрифт в Apple Font Book и набрав command+I.

  • В какой-то момент возникла проблема с использованием пользовательских шрифтов и UILabel. Я не уверен, что эта проблема все еще существует. Решение заключалось в подклассе UILabel и установке шрифта в нем.

Если он все еще не работает, этот поток на пользовательских шрифтах имеет довольно много информации, вам может быть повезло там.

РЕДАКТИРОВАТЬ
Там нет гарантии, что у меня есть тот же файл шрифта, что и у вас, но на моей машине имя PostScript - "EdwardianScriptITC"

Ответ 2

Если ваше имя шрифта содержит символ "-", замените его символом пробела. Например, Arial-Bold.ttf используется как [UIFont fontWithName: "Arial Bold" size: 10];

Ответ 3

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

let cfnt = txtUsernameField.font

затем нажмите кнопку я в маленьком окне отладки, и имя фамилии шрифта будет наложено в окне консоли. и вы можете использовать его так:

txtUsernameField.font = UIFont(name: "MyriadPro-CondIt", size: 14) 

Ответ 4

Используемое имя шрифта, как представляется, является "Фамилия" в Шрифтовой книге. Я пробовал имя PostScript, но он не всегда работает. Фамилия, насколько я могу судить, всегда работала до сих пор.

Вы можете проверить эту информацию, как указано в приведенном выше ответе, внутри Шрифтовой книги, выбрать шрифт и нажать cmd + I.

Надеюсь, что это поможет...

Ответ 5

У меня была эта проблема, хотя я поклялся, что раньше у меня были пользовательские шрифты, прекрасно работающие.

Оказывается, мне просто нужно было запустить "Очистить" мой проект в проекте XCode, чтобы он мог восстановить ссылки.