iOS字体大小适配

作者: 前年的邂逅_Jerry | 来源:发表于2018-05-12 23:53 被阅读414次
    #import "UIFont+runtime.h"
    #import <objc/runtime.h>
    #define UI_SCREEN  375 // UI设计原型图的手机尺寸宽度(6), 6p的--414
    @implementation UIFont (runtime)
    + (void)load {
        // 获取替换后的类方法
        Method newMethod1 = class_getClassMethod([self class], @selector(adjustSystemFontOfSize:));
        // 获取替换前的类方法
        Method method1 = class_getClassMethod([self class], @selector(systemFontOfSize:));
        // 然后交换类方法,交换两个方法的IMP指针,(IMP代表了方法的具体的实现)
        method_exchangeImplementations(newMethod1, method1);
        
        
        // 获取替换后的类方法
        Method newMethod2 = class_getClassMethod([self class], @selector(adjustFontWithName:size:));
        // 获取替换前的类方法
        Method method2 = class_getClassMethod([self class], @selector(fontWithName:size:));
        // 然后交换类方法,交换两个方法的IMP指针,(IMP代表了方法的具体的实现)
        method_exchangeImplementations(newMethod2, method2);
        
        
        // 获取替换后的类方法
        Method newMethod3 = class_getClassMethod([self class], @selector(adjustSystemFontOfSize:weight:));
        // 获取替换前的类方法
        Method method3 = class_getClassMethod([self class], @selector(systemFontOfSize:weight:));
        // 然后交换类方法,交换两个方法的IMP指针,(IMP代表了方法的具体的实现)
        method_exchangeImplementations(newMethod3, method3);
        
        // 获取替换后的类方法
        Method newMethod4 = class_getClassMethod([self class], @selector(adjustBoldSystemFontOfSize:));
        // 获取替换前的类方法
        Method method4 = class_getClassMethod([self class], @selector(boldSystemFontOfSize:));
        // 然后交换类方法,交换两个方法的IMP指针,(IMP代表了方法的具体的实现)
        method_exchangeImplementations(newMethod4, method4);
        
        // 获取替换后的类方法
        Method newMethod5 = class_getClassMethod([self class], @selector(adjustItalicSystemFontOfSize:));
        // 获取替换前的类方法
        Method method5 = class_getClassMethod([self class], @selector(italicSystemFontOfSize:));
        // 然后交换类方法,交换两个方法的IMP指针,(IMP代表了方法的具体的实现)
        method_exchangeImplementations(newMethod5, method5);
        /*容易让UIAlertController  变形
        // 获取替换后的类方法
        Method newMethod6 = class_getClassMethod([self class], @selector(adjustFontWithDescriptor:size:));
        // 获取替换前的类方法
        Method method6 = class_getClassMethod([self class], @selector(fontWithDescriptor:size:));
        // 然后交换类方法,交换两个方法的IMP指针,(IMP代表了方法的具体的实现)
        method_exchangeImplementations(newMethod6, method6);
        */
    }
    
    + (UIFont *)adjustSystemFontOfSize:(CGFloat)fontSize {
        UIFont *newFont = nil;
        newFont = [UIFont adjustSystemFontOfSize:[UIFont adjustFontSize:fontSize]];
        return newFont;
    }
    + (UIFont *)adjustFontWithName:(NSString *)name size:(CGFloat)fontSize{
        UIFont *newFont = nil;
        newFont = [UIFont adjustFontWithName:name size:[UIFont adjustFontSize:fontSize]];
        return newFont;
    }
    + (UIFont *)adjustSystemFontOfSize:(CGFloat)fontSize weight:(UIFontWeight)weight{
        UIFont *newFont = nil;
        newFont = [UIFont adjustSystemFontOfSize:[UIFont adjustFontSize:fontSize]];
        return newFont;
    }
    + (UIFont *)adjustBoldSystemFontOfSize:(CGFloat)fontSize{
        UIFont *newFont = nil;
        newFont = [UIFont adjustBoldSystemFontOfSize:[UIFont adjustFontSize:fontSize]];
        return newFont;
    }
    + (UIFont *)adjustItalicSystemFontOfSize:(CGFloat)fontSize{
        UIFont *newFont = nil;
        newFont = [UIFont adjustItalicSystemFontOfSize:[UIFont adjustFontSize:fontSize]];
        return newFont;
    }
    
    + (UIFont *)adjustFontWithDescriptor:(UIFontDescriptor *)descriptor size:(CGFloat)fontSize{
        UIFont *newFont = nil;
        newFont = [UIFont adjustFontWithDescriptor:descriptor size:[UIFont adjustFontSize:fontSize]];
        return newFont;
    }
    + (CGFloat)adjustFontSize:(CGFloat)fontSize{
        return fontSize * [UIScreen mainScreen].bounds.size.width / UI_SCREEN;
    }
    @end
    

    相关文章

      网友评论

      • 没有梦想_何必远方:乱方法替换,会让一些别人写的代码变得会诡异。建议写分类,哪里需要哪里用分类
        前年的邂逅_Jerry:@没有梦想_何必远方 如果在不熟悉其他控件代码的情况下,需要考虑这些.毕竟是全局修改,在加之前需要考虑多一点.
        没有梦想_何必远方:@前年的邂逅_Jerry
        好吧。小项目中,UI如果全用自己写的倒是可以使尝试。
        但是在大项目里面,你这么随意一替换,或者用了别人的UI-SDK,就很可能导致别人的UI变形、显示异常。
        方法替换这种东西,一定要清晰明确可能产生哪些影响和副作用。
        否则会适得其反。
        对于越大的项目,合作团队越多的项目,稳定更重要。
        前年的邂逅_Jerry:@没有梦想_何必远方 你这样会导致项目臃肿.我在项目中还没见到过诡异的地方,感觉还好.
      • 随行的羊:不贴个图,说说什么用
        前年的邂逅_Jerry:@随行的羊 fontWithDescriptor:size: 这个方法不能替换。否则会让UIAlertController变形。忘记加上去了,你看下。
        随行的羊:@前年的邂逅_Jerry 那好的。
        前年的邂逅_Jerry:@随行的羊 你加入到工程里面就可以看到效果了

      本文标题:iOS字体大小适配

      本文链接:https://www.haomeiwen.com/subject/rtrkdftx.html