2013-08-12 4 views
8

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

Кроме того, API [UIFont systemFontOfSize:] также использует системный шрифт.

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

+1

Вы пытались сделать категорию для UIFont? – NeverBe

+0

Вы уверены, что хотите его изменить? Вот как рождаются jarring интерфейсы. – Dave

+0

@ Даве: Да. Я уверен, что хочу его изменить :) –

ответ

8

Ответ: нет, вы не можете изменить систему AppleFont, вам нужно установить шрифт на свой контроль самостоятельно.

Для лучшего способа установить шрифт по умолчанию для всего приложения IOS, пожалуйста, проверьте ниже SO вопросы:

Set a default font for whole iOS app?

How to set a custom font for entire iOS app without specifying size

How do I set a custom font for the whole application?

Is there a simple way to set a default font for the whole app?

5

Определение и экспорт (путем включения заголовка в файлы или в precompi привел заголовок) категория UIFont следующим образом:

@implementation UIFont (Utils) 

#pragma clang diagnostic push 
#pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation" 

+ (UIFont *)systemFontOfSize:(CGFloat)size 
{ 
    return [UIFont fontWithName:@"YOUR_TRUETYPE_FONT_NAME_HERE" size:size]; 
} 

+ (UIFont *)lightSystemFontOfSize:(CGFloat)size 
{ 
    return [UIFont fontWithName:@"YOUR_TRUETYPE_FONT_NAME_HERE" size:size]; 
} 

+ (UIFont *)boldSystemFontOfSize:(CGFloat)size 
{ 
    return [UIFont fontWithName:@"YOUR_TRUETYPE_FONT_NAME_HERE" size:size]; 
} 

+ (UIFont *)preferredFontForTextStyle:(NSString *)style 
{ 
    if ([style isEqualToString:UIFontTextStyleBody]) 
     return [UIFont systemFontOfSize:17]; 
    if ([style isEqualToString:UIFontTextStyleHeadline]) 
     return [UIFont boldSystemFontOfSize:17]; 
    if ([style isEqualToString:UIFontTextStyleSubheadline]) 
     return [UIFont systemFontOfSize:15]; 
    if ([style isEqualToString:UIFontTextStyleFootnote]) 
     return [UIFont systemFontOfSize:13]; 
    if ([style isEqualToString:UIFontTextStyleCaption1]) 
     return [UIFont systemFontOfSize:12]; 
    if ([style isEqualToString:UIFontTextStyleCaption2]) 
     return [UIFont systemFontOfSize:11]; 
    return [UIFont systemFontOfSize:17]; 
} 

#pragma clang diagnostic pop 

@end 

Light вариант приходит как полезные дополнительные начиная с прошивкой 7. Наслаждайтесь! ;)

+2

Это не очень хорошая идея. – orj

+0

@orj Почему это не очень хорошая идея? это, похоже, не использует недокументированные api. или это ? –

+2

Ну, это перегружает стандартную реализацию этих методов в UIKit, что не совсем рекомендуется; F.E. iOS 9 поставляется с адаптивным переключением системного шрифта между вариантами San Francisco _Display_ и _Text_ в зависимости от требуемого размера шрифта. Я все же нашел эту технику ** безопасной **, хотя, если вы не пишете типографское приложение или не нуждаетесь в дополнительных шрифтах, это очень простой и быстрый способ переключить шрифты приложения по умолчанию довольно детерминированным способом. – michi

Смежные вопросы