美文网首页
iOS字体适配

iOS字体适配

作者: 冰点雨 | 来源:发表于2020-03-12 12:35 被阅读0次

1.适配方案总结

1.等比例缩放+加减->1.1按不同机型或屏幕宽等比缩放->1.2按不同机型或屏幕宽加减
2.runtime方法替换

2.参考文章

ios字体适配的三种实现方法!

3.不同机型的物理尺寸图和分辨率数据

img.jpg

4.字体适配方案

4.1 使用宏根据屏幕宽度或者机型来适配

使用场景:纯代码,不同屏幕显示字号有UI规范

//1.在PCH文件中定义宏,调用UIFont的分类方法
#define FontCaseOne(F) [UIFont fontSize:(F)]

//2. UIFont(FitFont) 分类方法实现,此处采用的方案是375屏宽以上字体+1,375屏宽以上字体-1

+ (UIFont *)fontSize:(CGFloat)font {
    if (SCREEN_WIDTH == 320) {
        return [UIFont systemFontOfSize:(font - 1)];
    }else if (SCREEN_WIDTH == 375){
        return [UIFont systemFontOfSize:font];
    }else{
        return [UIFont systemFontOfSize:(font + 1 )];
    }
}

4.2 用宏定义适配字体大小(根据屏幕尺寸判断)

1.5代表6P尺寸的时候字体为1.5倍,5S和6尺寸时大小一样,也可根据需求自定义比例。

#define IsIphone6P          SCREEN_WIDTH==414
#define SizeScale           (IsIphone6P ? 1.5 : 1)
#define kFontSize(value)    value*SizeScale
#define kFont(value)        [UIFont systemFontOfSize:value*SizeScale]

4.3 根据屏幕高度做字体适配

使用场景:纯代码,UI组件竖屏流体居多,根据屏幕宽度做不同字体适配,但是适配方案是根据屏幕高度的比例来做

//1.在PCH文件中定义宏,方便调用,调用UIFont的分类方法

#define FontCaseTwo(F) [UIFont fit_screenWidith:(F)]
#define FitHeight(H) [UIView fit_screenHeight:(H)]

//2. UIView (Fit)方法实现,实现fit_screenHeight方法
+ (CGFloat)fit_screenHeight:(CGFloat)height {
    CGFloat H = (height / 667.000 * [UIScreen mainScreen].bounds.size.height);
    return H;
}

//3. UIFont(FitFont) 分类方法实现,实现fit_screenWidith方法
+ (UIFont *)fit_screenWidith:(CGFloat)font {
    if (SCREEN_WIDTH == 320) {
        return [UIFont systemFontOfSize:FitHeight(font)];
    }else if (SCREEN_WIDTH == 375){
        return [UIFont systemFontOfSize:FitHeight(font)];
    }else{
        return [UIFont systemFontOfSize:FitHeight(font)];
    }
}

4.4 根据屏幕高度,利用runtime方法交换适配

如果用了这个方案,整个调用系统的方案都会被修改,别的方案就没有效果了

// UIFont (RuntimeFit)实现

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

+ (UIFont *)runtimeFitFont:(CGFloat)fontSize {
    UIFont *fitFont = nil;
    //这里并不会造成递归调用,方法已经被交换
    fitFont = [UIFont runtimeFitFont:fontSize * (SCREEN_WIDTH / 375 )];
    return fitFont;
}

外部正常调用系统设置字体方法就行

UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(0, 150, [UIScreen mainScreen].bounds.size.width, 60)];
label.text = @"iOS字体大小适配";
label.font = [UIFont systemFontOfSize:16];
[self.view addSubview:label];

相关文章

  • iOS字体大小适配的几种方法

    iOS字体大小适配的几种方法 iOS字体大小适配的几种方法

  • iOS9适配系列教程

    iOS9适配系列教程另外在补充下:ios9下的字体默认情况下要比ios9之前的字体大,所以在适配和使用autoLa...

  • 2018-11-28

    iOS字体大小适配的几种方法 - 简书

  • ios字体适配的三种实现方法

    大家先看下IOS字体规范与多屏幕适配的规律和在不同尺寸屏幕适配的UI布局: 在项目中肯定会遇到字体适配的问题,从上...

  • iOS字体适配的几种方法总结

    在iOS开发中,有些公司对字体也有适配要求,为了让字体美观,所以在不同尺寸的屏幕上字体大小也要做到适配。 自己总结...

  • iOS字体大小适配的几种方法

    在iOS开发中,有些公司对字体也有适配要求,为了让字体美观,所以在不同尺寸的屏幕上字体大小也要做到适配。自己总结了...

  • iOS字体大小适配

    在iOS开发中,有些公司对字体也有适配要求,为了让字体美观,所以在不同尺寸的屏幕上字体大小也要做到适配。自己总结了...

  • iOS字体适配

    随着iPhone机型种类的增加,iOS的小开发仔们各种机型的屏幕适配,字体适配是否困扰着你呢?我们都知道屏幕适配有...

  • iOS 字体适配

    修改时间: 2016-12-05修改次数: 0 其实我的适配很简单的,根据屏幕宽度来设置的,只适配了,4寸,4.7...

  • iOS 字体适配

    在日常开发中,相信很多小伙伴都有遇到过不同机型字体适配的需求,那么今天我将分享给大家如何通过自定义一个宏来解决所有...

网友评论

      本文标题:iOS字体适配

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