iOS字体大小适配的3种方法示例代码

前言

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

自己总结了几种方法供大家参考,下面话不多说了,来一起看看详细的介绍吧

方法如下:

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

//宏定义
#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-2;
 }else if (SCREEN_WIDTH==375){
  return fontSize;
 }else{
  return fontSize+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]

方法三:(利用runTime给UIFont写分类 替换系统自带的方法)推荐使用这种

class_getInstanceMethod得到类的实例方法

class_getClassMethod得到类的类方法

1. 首先需要创建一个UIFont的分类

2. 自己UI设计原型图的手机尺寸宽度

#define MyUIScreen 375 // UI设计原型图的手机尺寸宽度(6), 6p的--414
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 = @"iOS字体大小适配";
label.font = [UIFont systemFontOfSize:16];
[self.view addSubview:label];

注意:

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

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • iOS App开发中修改UILabel默认字体的方法

    在项目比较成熟的基础上,遇到了这样一个需求,应用中需要引入新的字体,需要更换所有Label的默认字体,但是同时,对于一些特殊设置了字体的label又不需要更换.乍看起来,这个问题确实十分棘手,首先项目比较大,一个一个设置所有使用到的label的font工作量是巨大的,并且在许多动态展示的界面中,可能会漏掉一些label,产生bug.其次,项目中的label来源并不唯一,有用代码创建的,有xib和storyBoard中的,这也将浪费很大的精力.这种情况下,我们可能会有下面两种处理方式. 一.普通方

  • 详解iOS 关于字体根据不同屏幕尺寸等比适配的问题

    背景 去年的六月份开始了一个新的项目,此项目支持的设备从4S开始一直到6+,也就是说屏幕的尺寸最小的320x480 最大的1242x2208 (不过目前好像大部分的App都会这样去支持),而客户那边有一个奇葩要求 就是所有的控件布局必须依据屏幕的尺寸等比缩放.当然这个对于iOS的开发来说的话还是比较容易实现的(iOS有个Autoresizing刚好是依据父视图的大小作等比缩放的). 项目就这样愉快的进行,然而当项目快要结束的时候,客户愤怒质问我们为什么字体大小没有根据屏幕作等比适配,再有几天的时

  • iOS实现应用内切换语言及字体大小(模仿微信)

    前言 最近公司需要切换多语言和字体大小功能,上网查看比较少的实用方案.于是我经过几天尝试和思考完成了第一版的应用内多语言版本切换的功能Demo.下面分享给大家,需要的朋友可以参考学习,下面话不多说了,来一起看看详细的介绍吧. 方案思路: 一.如何只在一个配置文件中,实现多语言的配置. 二.每个文本控件如何显示对应语言. 三.如果通过开关来控制界面中的每个文本控件,同时切换对应的语言和字体样式. 首先: 解决第一个配置问题:我是用plist文件(JSON文件也可以).通过一个key 对应一组语言数

  • iOS设置UIButton文字显示位置和字体大小、颜色的方法

    前言 大家都知道UIButton按钮是IOS开发中最常用的控件,作为IOS基础学习教程知识 ,初学者需要了解其基本定义和常用设置,以便在开发在熟练运用. 一.iOS设置UIButton的字体大小 btn.frame = CGRectMake(x, y, width, height); [btn setTitle: @"search" forState: UIControlStateNormal]; //设置按钮上的自体的大小 //[btn setFont: [UIFont system

  • Xcode8下iOS10常见报错闪退,字体适配和编译不过的问题及解决方案

    9月14日凌晨1点,苹果推送了iOS10,于是一上班就迅速升级了iOS10,然后坑就这样开始了... 问题1 首先是xcode的问题,发现xcode升级到8才能真机运行,于是先了解了下iOS10的适配. 有这个iOS10适配总结,还有这个iOS10适配问题收集整理,还有这个iOS10适配,还有很多其他的. 这个好办,取消nullabl关键字就好. 然后另一个蛋疼的问题来了 问题二,编译不过的问题 蛋疼的clang报错le.. 这个是详细的信息,一堆莫名其妙的东西出来了. 隐隐约约感觉是WGS84

  • iOS10 App适配权限 Push Notifications 字体Frame 遇到的问题

    添加配置权限 <!-- 相册 --> <key>NSPhotoLibraryUsageDescription</key> <string>"xx"想使用您的相册,需要您的允许</string> <!-- 相机 --> <key>NSCameraUsageDescription</key> <string>"xx"想使用您的相机,需要您的允许</strin

  • iOS字体大小适配的3种方法示例代码

    前言 在iOS开发中,有些公司对字体也有适配要求,为了让字体美观,所以在不同尺寸的屏幕上字体大小也要做到适配. 自己总结了几种方法供大家参考,下面话不多说了,来一起看看详细的介绍吧 方法如下: 方法一:用宏定义适配字体大小(根据屏幕尺寸判断) //宏定义 #define SCREEN_WIDTH ([UIScreen mainScreen].bounds.size.width) #define FONT_SIZE(size) ([UIFont systemFontOfSize:FontSize(

  • Oracle查看表结构的几种方法示例代码

    1,DESCRIBE 命令 使用方法如下: SQL> describe nchar_tst(nchar_tst为表名) 显示的结果如下: 名称 是否为空? 类型 ----------------------------------------- -------- ---------------------------- NAME NCHAR(6) ADDR NVARCHAR2(16) SAL NUMBER(9,2) 2,DBMS_METADATA.GET_DDL包 使用方法如下: SQL> S

  • Java 添加Word目录的2种方法示例代码详解

    目录是一种能够快速.有效地帮助读者了解文档或书籍主要内容的方式.在Word中,插入目录首先需要设置相应段落的大纲级别,根据大纲级别来生成目录表.本文中生成目录分2种情况来进行: 1.文档没有设置大纲级别,生成目录前需要手动设置 2.文档已设置大纲级别,通过域代码生成目录 使用工具: •Free Spire.Doc for Java 2.0.0 (免费版) •IntelliJ IDEA 工具获取途径1:通过官网下载jar文件包,解压并导入jar文件到IDEA程序. 工具获取途径2:通过Maven仓

  • ExtJs默认的字体大小改变的几种方法(自己整理)

    以下列出网上收集的几种方法,希望对大家有用. 1. 只需把ext-all.css样式文件中的所有11px换成12px,这样就为统一的12px的字体了. 但是如果再想增大,那么这时候不光是把源文件的11px换成15px,而且需要把里面和font有关的12px换成15px. 改完之后按钮出现毛边,在样式文件中加 复制代码 代码如下: .ext-ie .x-btn-text-icon .x-btn-center .x-btn-text { padding:3px 0px 0px 0px; } 毛边就不

  • java 遍历MAP的几种方法示例代码

    java中遍历MAP的几种方法 Map<String,String> map=new HashMap<String,String>(); map.put("username", "qq"); map.put("passWord", "123"); map.put("userID", "1"); map.put("email", "qq

  • Python删除字符串中字符的四种方法示例代码

    目录 一.删除字符串两端的一种或多种字符 二.删除字符串中单个固定位置的字符 三.删除字符串中任意位置的一种或多种字符 四.同时删除字符串内的多种不同字符 一.删除字符串两端的一种或多种字符 #strip().lstrip().rstrip()方法:(默认删除空格符) A.list.strip(字符):删除字符串两端的一种或多种字符: 例:删除字符串s两端 a 或 b 或 c 字符: s = 'abbmmmcccbbb' s1 = s.strip('abc') print(s1) #输出:mmm

  • iOS中设置圆角的几种方法示例

    前言 圆角(RounderCorner)是一种很常见的视图效果,相比于直角,它更加柔和优美,易于接受.但很多人并不清楚如何设置圆角的正确方式和原理.设置圆角会带来一定的性能损耗,如何提高性能是另一个需要重点讨论的话题.我查阅了一些现有的资料,收获良多的同时也发现了一些误导人错误. 1. 使用layer属性 layer.backgroundColor = [UIColor cyanColor].CGColor; // 给图层添加背景色 layer.contents = (id)[UIImage i

  • 单链表实现反转的3种方法示例代码

    前言 单链表的操作是面试中经常会遇到的问题,今天总结一下反转的几种方案: 1 ,两两对换 2, 放入数组,倒置数组 3, 递归实现 代码如下: #include<stdio.h> #include<malloc.h> typedef struct Node { int data; struct Node *pnext; } Node,*pnode; pnode CreateNode() { pnode phead=(pnode)malloc(sizeof(Node)); if(ph

  • iOS实现图片压缩的两种方法及图片压缩上传功能

    两种压缩图片的方法:压缩图片质量(Quality),压缩图片尺寸(Size). 压缩图片质量 NSData *data = UIImageJPEGRepresentation(image, compression); UIImage *resultImage = [UIImage imageWithData:data]; 通过 UIImage 和 NSData 的相互转化,减小 JPEG 图片的质量来压缩图片.UIImageJPEGRepresentation:: 第二个参数 compressi

  • IOS自带Email的两种方法实例详解

    IOS自带Email的两种方法实例详解 IOS系统框架提供的两种发送Email的方法:openURL 和 MFMailComposeViewController.借助这两个方法,我们可以轻松的在应用里加入如用户反馈这类需要发送邮件的功能. 1.openURL 使用openURL调用系统邮箱客户端是我们在IOS3.0以下实现发邮件功能的主要手段.我们可以通过设置url里的相关参数来指定邮件的内容,不过其缺点很明显,这样的过程会导致程序暂时退出.下面是使用openURL来发邮件的一个小例子: #pr

随机推荐