Некоторые шрифты не отображаются? - PullRequest
13 голосов
/ 09 мая 2011

У меня есть список имен шрифтов в моем приложении, которые отображаются в шрифте, который они представляют. Следующие три не работают, хотя:

ArialRoundedMTBold
ChalkboardSE-Bold
TrebuchetMS-Жирный

Вместо этого они отображаются стандартным шрифтом.

Есть идеи, почему они могут не появляться?

Ответы [ 5 ]

37 голосов
/ 09 мая 2011

Как настроить пользовательский шрифт

Чтобы использовать пользовательский шрифт (не включенный в iOS), вы должны отредактировать файл <appname>-Info.plist и создать новый ключ UIAppFonts с массивом типов, где каждыйЭлементом массива является String с именем вашего шрифтового файла.Пример: VAGRoundedStd-Light.ttf.Вы также должны добавить файл в свой проект.

UIAppFonts

Примечание. При вводе UIAppFonts и нажатии клавиши ввода ключ преобразуется в «Шрифты, предоставленныеapplication ".

Однако, когда вы используете шрифт в Интерфейсном Разработчике (или с UIFont), вы не используете имя файла шрифта, а имя, которое появляется при открытии шрифтав приложении Шрифт Book вашего Mac.Для предыдущего примера это будет VAG Rounded Std Light.

Font Book

OS X более устойчива, чем iOS, переваривающая форматы TrueType, поэтому в редких случаях вы можете найти шрифт, который работает в OS X, но не в iOS.Если это произойдет, замените шрифт, чтобы проверить, правильно ли вы выполнили процесс.

Как программно загрузить шрифт

Это решает ситуацию, когда лицензия на шрифт требует от вас распространения шрифта.зашифрованы.

  1. Первым шагом является шифрование и дешифрование шрифта любым алгоритмом, который вы считаете подходящим.
  2. Загрузить шрифт как объект NSData и отменить шифрование.
  3. Зарегистрируйте шрифт программно.

Этот следующий рецепт из Динамическая загрузка шрифтов iOS от Marco Arment.Это делает шрифты доступными в UIFont и UIWebView.Тот же код можно использовать для загрузки шрифтов из Интернета.

NSData *inData = /* your decrypted font-file data */;
CFErrorRef error;
CGDataProviderRef provider = CGDataProviderCreateWithCFData((CFDataRef)inData);
CGFontRef font = CGFontCreateWithDataProvider(provider);
if (! CTFontManagerRegisterGraphicsFont(font, &error)) {
    CFStringRef errorDescription = CFErrorCopyDescription(error)
    NSLog(@"Failed to load font: %@", errorDescription);
    CFRelease(errorDescription);
}
CFRelease(font);
CFRelease(provider);

Как загрузить более двух шрифтов одного семейства

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

Вот обходной путь кода от пользователя stackoverflow Evadne Wu .Просто вставьте следующее в ваш делегат приложения (обратите внимание, что оно использует две платформы):

#import <CoreText/CoreText.h>
#import <MobileCoreServices/MobileCoreServices.h>

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    CTFontManagerRegisterFontsForURLs((__bridge CFArrayRef)((^{
        NSFileManager *fileManager = [NSFileManager defaultManager];
        NSURL *resourceURL = [[NSBundle mainBundle] resourceURL];
        NSArray *resourceURLs = [fileManager contentsOfDirectoryAtURL:resourceURL includingPropertiesForKeys:nil options:0 error:nil];
        return [resourceURLs filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(NSURL *url, NSDictionary *bindings) {
            CFStringRef pathExtension = (__bridge CFStringRef)[url pathExtension];
            NSArray *allIdentifiers = (__bridge_transfer NSArray *)UTTypeCreateAllIdentifiersForTag(kUTTagClassFilenameExtension, pathExtension, CFSTR("public.font"));
            if (![allIdentifiers count]) {
                return NO;
            }
            CFStringRef utType = (__bridge CFStringRef)[allIdentifiers lastObject];
            return (!CFStringHasPrefix(utType, CFSTR("dyn.")) && UTTypeConformsTo(utType, CFSTR("public.font")));

        }]];
    })()), kCTFontManagerScopeProcess, nil);

    return YES;
}

Доступно как gist .Комментарий в блоге автора: Загрузка 2+ шрифтов на iOS из того же семейства шрифтов .


Альтернативный, более сложный обходной путь от pixeldock.com :

Если вы добавите более двух вариантов шрифта одного и того же семейства шрифтов (например, «Нормальный», «Полужирный» и «Расширенный»), только последние два варианта шрифта, добавленные в проект, будутбыть пригодным для использования.

Если вы видите, что это происходит, это ограничение вашей версии SDK, и единственным выходом из этого является редактирование семейства шрифтов с помощью редактора шрифтов, такого как Fontforge.Снова, с pixeldock.com :

  1. Откройте ваш шрифт в Fontforge
  2. Перейдите в «Элемент» -> «Информация о шрифте» и измените «Фамилия»поле
  3. Перейдите к «Элемент» -> «Имена TTF» и измените поля «Семейство» и «Предпочитаемое семейство»
  4. Перейдите в «Файл» -> «Создать шрифты» и сохраните отредактированный шрифт.
2 голосов
/ 09 мая 2011

В iOS доступно только подмножество шрифтов Mac OS.Если вы установите шрифт, который недоступен, он будет отображаться как стандартный Helvetica.

1 голос
/ 01 марта 2014

Я использовал шрифт Google с именем Arvo.В нем были следующие файлы:

Arvo-Regular.ttf Arvo-Bold.ttf Arvo-BoldItalic.ttf Arvo-Italic.ttf Эти имена были добавлены в info.plist моего приложения, но по какой-то причине мое приложение моглочитать только полужирный, полужирный и курсивный шрифты.Он не мог прочитать обычный шрифт, когда я пытался загрузить его.Однако после распечатки названий шрифтов выяснилось, что в моем приложении Arvo-Regular был распознан как Arvo.

0 голосов
/ 10 апреля 2013

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

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

0 голосов
/ 07 сентября 2011

У меня была похожая проблема с тем, что я не нашел Chalkduster - хотя IB перечислил его как шрифт, и он указан как шрифт IOS. Я обнаружил, что список шрифтов на iPhone и iPad не идентичен.

Chalkduster доступен для iPad, но не для iPhone. Классная доска доступна на iPad 4.x, но не 3.x. Это доступно на iPhone 3.x & 4.x.

Подробнее здесь: http://www.whatsyourdigitaliq.com/2011/05/11/fonts-available-in-various-versions-of-ios/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...