iOS利用runtime全局修改系统字体或者三方字体

iOS利用runtime全局修改系统字体或者三方字体

.h

//利用runtime交换方法,全局修改系统字体或者三方字体
#import <UIKit/UIKit.h>

@interface UIFont (FontNameSize)

@end

.m

//利用runtime交换方法,全局修改系统字体或者三方字体
#import "UIFont+FontNameSize.h"

@implementation UIFont (FontNameSize)
//只执行一次的方法,在这个地方 替换方法
+(void)load{
    
    //保证线程安全
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        Class class = [self class];
        //拿到系统方法
        Method orignalMethod = class_getClassMethod(class, @selector(systemFontOfSize:));
        //拿到自己定义的方法
        Method myMethod = class_getClassMethod(class, @selector(test_systemFontOfSize:));
        //交换方法
        method_exchangeImplementations(orignalMethod, myMethod);
        
        //注意,只有调用了下面这个方法的控件才会执行字体修改,默认字号大小的控件不会修改。
        //[UIFont systemFontOfSize:12]
    });
}

//自己的方法
+ (UIFont *)test_systemFontOfSize:(CGFloat)fontSize{
//系统字体:GillSans-BoldItalic  AppleSDGothicNeo-Light  HiraMaruProN-W4
    UIFont *font = [UIFont fontWithName:@"AppleSDGothicNeo-Light" size:fontSize];
    if (!font){
        //判空,如果字体不存在就返回系统默认字体,不然会崩溃
        return [self test_systemFontOfSize:fontSize];
    }
    return font;
}

@end
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容