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
网友评论