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

UIFont с настраиваемым шрифтом терпит неудачу с Nil

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

Я сделал следующее:
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'.

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

enter image description here

Ответ 3

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

Альтернативно, если вы не можете найти что-либо в Шрифтовой книге, вы можете попробовать позвонить:

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

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

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

Ответ 4

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

    for (NSString *familyName in [UIFont familyNames]) {
        for (NSString *fontName in [UIFont fontNamesForFamilyName:familyName]) {
            NSLog(@"%@", fontName);
        }
    }

Ответ 5

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

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

Ответ 6

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

Ответ 7

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

    UIFont(name: "SF-Pro-Display-Semibold", size: 15) // fails
    UIFont(name: "SFProDisplay-Semibold", size: 15) // succeeds