项目迭代中涉及到以前字体的改变,如果单个修改涉及到的工程量太大,所以直接使用runtime交换方法做处理。
实现方案如下:
define Ratio [[UIScreen mainScreen] bounds].size.width/(750)*(2) //相对与6的标注的倍率
@implementation UIFont (Auto)
(void)load {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
Method originalMethod = class_getClassMethod([self class], @selector(systemFontOfSize:));
Method swizzledMethod = class_getClassMethod([self class], @selector(sw_systemFontOfSize:));
method_exchangeImplementations(originalMethod, swizzledMethod);
});
}(UIFont *)sw_systemFontOfSize:(CGFloat)fontSize {
return [UIFont sw_systemFontOfSize:fontSize * Ratio];
}
@end
1.load方法只会走一次,利用runtime进行方法替换。
2.替换的方法里面(把系统的方法换成我们自己写的方法)
3.凡是以后用到systemFontOfSize方法的地方,都会被替换成sw_systemFontOfSize:方法。