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

Я включил несколько файлов ttf Google Fonts в свой проект iOS в качестве пользовательских шрифтов. Все работает, и я могу использовать шрифты. Однако мне нужно различать пользовательские шрифты и те, которые автоматически предоставляются iOS.

Я попытался сравнить имена файлов, возвращаемые UIFont.FontNamesForFamilyName, с именами файлов шрифтов в файле Info.plist. Хотя это работает для большинства шрифтов, имена файлов не всегда совпадают с именами шрифтов; в некоторых могут быть символы подчеркивания или тире. Поскольку я не могу полагаться на точное имя файла, какие еще у меня есть варианты?


person gonzobrains    schedule 23.06.2016    source источник


Ответы (1)


Это немного сложно, и это не просто, но определенно выполнимо.

Что вам нужно, так это знать, какое «имя шрифта» идет из коробки, а какое нет.

Для того, чтобы найти, что это, как я сделал бы это. Создайте фиктивный новый образец проекта. В файле AppDelegate.m добавьте это

// Get All fonts
NSArray *fontFamilies = [UIFont familyNames];

for (int i=0; i<[fontFamilies count]; i++)
{
    NSLog(@"Font: %@ ...", [fontFamilies objectAtIndex:i]);
}

Это даст вам имена всех шрифтов, установленных по умолчанию в iOS. Вы можете сохранить эту информацию в файле plist в каталоге документов.

Теперь запустите ту же команду в своем пользовательском проекте. Это даст вам как вашу iOS, так и ваши собственные пользовательские шрифты. Снова сохраните эту информацию в другом файле plist в вашем каталоге документов.

Теперь вам нужно получить оба этих plist-файла в одном проекте, прочитать каждый из них в массив и сравнить массивы. Это даст вам, какие шрифты вы добавили, а какие из коробки.

person Sam B    schedule 23.06.2016
comment
Я думал об этом, но могу ли я полагаться на это для разных устройств и версий iOS? Нельзя ли изменить этот список? - person gonzobrains; 23.06.2016
comment
хороший вопрос, я думаю, что список никогда не меняется. Я имею в виду, что шрифты, поставляемые в комплекте с iOS 9, одинаковы как для iPhone, так и для iPad. Сказав, что я не пробовал это с iPad. Наверняка список будет отличаться для iOS8 и iOS 9. - person Sam B; 24.06.2016