iOS字体大小适配

在iOS中,有些公司对字体也有适配要求,可以最大程度上利用Objective-C的动态语言特性,去适配。

class_getInstanceMethod得到类的实例方法
class_getClassMethod得到类的类方法

1. 首先需要创建一个UIFont的分类
2. 自己UI设计原型图的手机尺寸宽度
#define MyUIScreen  375 // UI设计原型图的手机尺寸宽度(6), 6p的--414
UIFont+runtime.h

#import <UIKit/UIKit.h>

@interface UIFont (runtime)

@end
UIFont+runtime.m

#import "UIFont+runtime.h"
#import <objc/runtime.h>

@implementation UIFont (runtime)

+ (void)load {
    // 获取替换后的类方法
    Method newMethod = class_getClassMethod([self class], @selector(adjustFont:));
    // 获取替换前的类方法
    Method method = class_getClassMethod([self class], @selector(systemFontOfSize:));
    // 然后交换类方法,交换两个方法的IMP指针,(IMP代表了方法的具体的实现)
    method_exchangeImplementations(newMethod, method);
}

+ (UIFont *)adjustFont:(CGFloat)fontSize {
    UIFont *newFont = nil;
    newFont = [UIFont adjustFont:fontSize * [UIScreen mainScreen].bounds.size.width/MyUIScreen];
    return newFont;
}
@end
Controller类中正常调用就行了:
UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(0, 150, [UIScreen mainScreen].bounds.size.width, 60)];
label.text = @"适配字体大小";
label.backgroundColor = [UIColor yellowColor];
label.font = [UIFont systemFontOfSize:16];
[self.view addSubview:label];

注意:
load方法只会走一次,利用runtime的method进行方法的替换
替换的方法里面(把系统的方法替换成我们自己写的方法),这里要记住写自己的方法,不然会死循环
之后凡是用到systemFontOfSize方法的地方,都会被替换成我们自己的方法,即可改字体大小了
注意:此方法只能替换 纯代码 写的控件字号,如果你用xib创建的控件且在xib里面设置的字号,那么替换不了!你需要在xib的
awakeFromNib方法里面手动设置下控件字体

------整理

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Swift版本点击这里欢迎加入QQ群交流: 594119878最新更新日期:18-09-17 About A cu...
    ylgwhyh阅读 25,756评论 7 249
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,777评论 4 61
  • 你说枫叶苑央,后来琉璃满堂 你说梨落晨起,后来梅尽芬芳 你说芊芊玉歌,后来一曲退场 你说一齐盛放 ,后来离散各方 ...
    寻芊阅读 3,772评论 16 29
  • 简书这上面的文章为什么浏览量只有几个,是真的石沉大海了,还是写的太差了,还是简书的排序规则有问题。
    轩骥阅读 4,140评论 1 2
  • 我死后对这个世界有什么影响。朋友会忘记,父母悲伤过后会重新振作,世界会转,时间不会停止。那么我为什么还活着,我没有...
    精神病人的精神世界阅读 1,342评论 1 1

友情链接更多精彩内容