美文网首页
runtime运行时修改字体

runtime运行时修改字体

作者: 浩然爸 | 来源:发表于2016-11-24 15:10 被阅读139次

    前言

    最近遇到一个需求,要改掉app的字体,一个一个改不太现实,由于一直用的系统字体,于是就想到了用运行时来修改字体(仅限于纯代码的APP),闲话少说,直接上代码。

    • 方法交换

    首先创建一个UIfontcategory,把自己写的代码放在category里面(方法交换要写到load里面)

    @implementation UIFont (MyFont)
    
    + (void)load {
        Method myFontSize = class_getClassMethod(self, @selector(myFontOfSize:));
        Method systemFontSize = class_getClassMethod(self, @selector(systemFontOfSize:));
        method_exchangeImplementations(myFontSize, systemFontSize);
    }
    
    + (UIFont *)myFontOfSize:(CGFloat)fontSize{
        UIFont *font = [UIFont fontWithName:@"STHeitiTC-Light" size:fontSize];
        return font;
    }
    

    Method myFontSize = class_getClassMethod(self, @selector(myFontOfSize:));
    这句代码是通过运行时获取自己写的方法,然后获取系统方法Method systemFontSize = class_getClassMethod(self, @selector(systemFontOfSize:));
    最后进行方法交换
    method_exchangeImplementations(myFontSize, systemFontSize);

    • 方法使用

    下面是控制器里的代码,也就是创建的标签控制器

    @interface ViewController ()
    @property (weak, nonatomic) IBOutlet UILabel *label1;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
        
        
        UILabel *label = [[UILabel alloc] init];
        label.text = @"代码标签";
        label.textAlignment = NSTextAlignmentCenter;
        label.bounds = CGRectMake(0, 0, 100, 30);
        label.center = CGPointMake(self.view.center.x, 100);
        [self.view addSubview:label];
        
        _label1.font = [UIFont systemFontOfSize:16];
        
    }
    
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    @end
    

    运行以后的截图


    Simulator Screen Shot

    通过运行时来改变系统的字体,仅适用于纯代码写的Label,xib拖拽的控件不起作用,需要手动调用一下系统的方法systemFontSize:才能起作用,例如xib标签1的字体改变了,而xib标签2的字体没有改变,因为xib标签1调用了一下systemFontSize:方法。

    相关文章

      网友评论

          本文标题:runtime运行时修改字体

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