UIFont с пользовательским шрифтом не работает с Nil - PullRequest
12 голосов
/ 28 января 2012

Я пытаюсь добавить собственный шрифт в свой проект в Xcode 4.2, но всякий раз, когда я пытаюсь его использовать, я получаю сообщение об ошибке, что объект имеет значение nil.

Я сделал следующее:
1) Добавлена ​​строка в мой .plist значение «Шрифты, предоставляемые приложением»: «LCDMono2 Ultra.ttf»
2) Добавил шрифт в мои файлы поддержки и показал его в XCode, чтобы убедиться, что он был добавлен.
3) Проверено с помощью Get Info, что полное имя «LCDMono2 Ultra»
4) Создан шрифт в моем проекте с:

UIFont *myFont = [UIFont fontWithName:@"LCDMono2 Ultra" size:16];

, и я попробовал этот вариант:

UIFont *myFont = [UIFont fontWithName:@"LCDMono2 Ultra" size:16.f];

5) Пытался использовать имя шрифта (addObject:myFont.fontName), генерируя ошибку 'nil'.

Что может быть причиной ошибки?Может ли это быть что-то вроде пробела в имени?

Ответы [ 7 ]

13 голосов
/ 01 февраля 2012

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

11 голосов
/ 02 декабря 2013

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

Кажется, что-то изменилось в Xcode 5, шрифт должен был быть добавлен в целевых свойствах на вкладке информации, чтобы это работало, тогда как ранее они должны были быть добавлены в "appName-info.plist 'см. изображение ниже:

Надеюсь, это поможет кому-то еще.

enter image description here

2 голосов
/ 28 января 2012

Вы установили точку останова и проверили, что получаете действительный объект UIFont для myFont.Это стоит проверить, так как, скорее всего, проблема в том, что «LCDMono2 Ultra» на самом деле является именем семейства шрифтов, а вы хотите использовать что-то вроде «LCDMono2 Ultra-normal» или «LCDMono2 Ultra-bold».Откройте файл .ttf с помощью Font Book и посмотрите, какую информацию он вам дает.

В качестве альтернативы, если вы не можете найти что-либо в Font Book, вы можете попробовать позвонить:

NSArray *fonts = [UIFont fontNamesForFamilyName:"LCDMono2 Ultra"];

И затем просто распечататьшрифты массива в отладчике, чтобы проверить, какими они должны быть.

Надеюсь, эта помощь, дайте мне знать, если это не сработает, и я постараюсь придумать что-то еще:)

1 голос
/ 04 апреля 2017

Найдите свой шрифт (возможно, с другим именем) и используйте это имя.

    for (NSString *familyName in [UIFont familyNames]) {
        for (NSString *fontName in [UIFont fontNamesForFamilyName:familyName]) {
            NSLog(@"%@", fontName);
        }
    }
0 голосов
/ 16 мая 2019

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

    UIFont(name: "SF-Pro-Display-Semibold", size: 15) // fails
    UIFont(name: "SFProDisplay-Semibold", size: 15) // succeeds
0 голосов
/ 27 февраля 2019

Не забудьте включить расширение файла шрифта как часть имени в plist "Шрифты, предоставляемые приложением".

0 голосов
/ 09 августа 2017

Мой файл шрифта "Futura Heavy.ttf", затем я использую - заменил пробел, как показано ниже, тогда он работает!

    class func futuraHeavy() -> UIFont {
        return UIFont(name: "Futura-Heavy", size: 12)!
    }
...