iOS使用runtime对不同机型的字体大小适配

项目迭代中涉及到以前字体的改变,如果单个修改涉及到的工程量太大,所以直接使用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:方法。

你可能感兴趣的:(iOS使用runtime对不同机型的字体大小适配)