iOS字体适配方法总结

背景:有时候我们需要在不同尺寸的屏幕上适配不同大小的字体

思路:不同尺寸屏幕不同字体大小通过【等比例缩放 or 加减】来实现

实现方法:

(1)方式1:宏定义

(2)方式2:runtime方法替换

注意:以下方法只能适配代码写的字体大小,对于xib设置的字体大小,后续补充


方案1: 宏定义(屏幕宽度做加减)

//宏定义
#define SCREEN_WIDTH ([UIScreen mainScreen].bounds.size.width)
#define FONT_SIZE(size) ([UIFont systemFontOfSize:FontSize(size)])
//字体适配 在PCH文件定义了一个方法
static inline CGFloat FontSize(CGFloat fontSize) {
    if (SCREEN_WIDTH == 320) {
        return fontSize - 1;
    } else if (SCREEN_WIDTH == 375) {
        return fontSize;
    } else {
        return fontSize + 1;
    }
}  

方案2: 宏定义(屏幕宽度做比例)

#define SizeScale           (SCREEN_WIDTH/375.0)
#define kFont(value)        [UIFont systemFontOfSize:value*SizeScale]

方案3:runtime(方法交换)

首先需要创建一个UIFont的分类UIFont+runtime。

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

#define MyUIScreen  375 // UI设计原型图的手机尺寸宽度(6), 6p的--414

@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

然后外部正常调用systemFontOfSize方法即可: 

//外部正常调用系统设置字体方法即可
UILabel*l1=[[UILabel alloc]initWithFrame:CGRectMake(100, 100, 100, 40)];
l1.text=@"你好哇,你好哇";
l1.font= [UIFont systemFontOfSize:10];
[self.view addSubview:l1];

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值