有没有一种方法可以更改应用程序的默认字体?

8
我理解所有标准控件默认使用系统字体。
此外,API [UIFont systemFontOfSize: ] 也使用系统字体。
有没有一种方法可以重新定义整个应用程序的字体,而不是为表格、标签等设置字体?

1
你尝试过为UIFont创建一个类别吗? - NeverBe
你确定要更改它吗?这就是令人不适的界面产生的原因。 - Dave
@Dave:是的,我确定我想要更改它 :) - Victor Ronin
@NeverBe:有趣的想法。我会尝试一下。然而,标准控件行为可能会绕过这种特定的方法。 - Victor Ronin
2个回答

10

5

定义并导出(通过在文件中包含头文件或预编译的头文件)一个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

从iOS 7开始,轻量级版本成为一个有用的额外功能。享受吧!;)


@orj 为什么这不是一个好主意?这似乎没有使用未记录的API,或者是吗? - Kiran Ruth R
2
它重载了UIKit中这些方法的标准实现,这并不完全推荐;例如iOS 9带有自适应切换系统字体大小之间的旧金山_Display_和_Text_变体。尽管如此,我仍然认为这种技术是安全的,除非你正在编写一个印刷应用程序或需要一些字体额外功能,否则这是一种非常简单快捷的方式以相当确定的方式切换默认应用程序字体。 - Michi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接