iOS布局---pch头文件设置和字号适配
由于4s,5s,6,6p,界面尺寸差别过大,如果在界面上,只是用同一个字号,在4s和5s上就会略显偏大,而在6p上就会显小。并且ios9系统原生字体相较于ios8和之前原生字体略粗,在字号上也错了一号,所以在不同的设备上,字号也应该有所不同,ios9上的字号要比ios8上的字号都要略小一号。
我设置的字号适配需要用到全局引用文件pch文件,如果你的项目中已存在pch文件,请忽略1-2步骤。
在Xcode6之前,新建工程的时候,系统就会帮我们自动新建一个以工程名为名字的pch (precompile header)文件,在开发过程中,可以将那些整个工程都广泛使用的头文件包含在该文件下,编译器就会自动的将pch文件中的头文件添加到所有的源文件中去,这样在需要使用相关类的时候不需要使用import就可以直接使用头文件中的内容,很大程度上带来了编程的便利性,但是在xcode6之后,系统便不再自动新建pch文件,但有些时候,还是需要pch文件的,那么怎么在Xcode6中添加一个pch文件呢?
1.首先,Command+N,打开新建文件窗口:ios->other->PCH file,创建一个pch文件,添加需要引入的头文件名:

2.添加成功之后,需要在build中手动设置一下链接,否则链接不到也是不能使用:
打开targets-->build settings -->
设置prefix header(手动设置pch文件路径):


默认当前项目文件$(SRCROOT),后边文件路径可以查看:

3.设置好pch文件后,在这里先补充一下设备判断的宏:
//设备判断
#define kDevice_Is_iPhone5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO)
#define kDevice_Is_iPhone6 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(750, 1334), [[UIScreen mainScreen] currentMode].size) : NO)
#define kDevice_Is_iPhone6Plus ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1242, 2208), [[UIScreen mainScreen] currentMode].size) : NO)
4.还有判断ios8和ios9系统(ios9上的字号要比ios8上的字号都要略小一号)的宏:
//判断设备系统是否是9.0或以上
#define IOS_VERSION_9_OR_ABOVE (([[[UIDevice currentDevice] systemVersion] floatValue] >= 9.0)? (YES):(NO))
//判断设备系统是否是9.0以上(不含9.0)
#define IOS_VERSION_8_OR_ABOVE (([[[UIDevice currentDevice] systemVersion] floatValue] <9.0)? (YES):(NO))
5.准备已经完成,接下来,最核心的地方要到了,在这里我使用的是一个内联函数,可以直接在实现在pch文件中,
//根据设备不同 返回不同的字号
static inline int sizeValue(int sizefont) {
if(kDevice_Is_iPhone5)
{
if(IOS_VERSION_9_OR_ABOVE)
return sizefont-1;
return sizefont;
}
else if (kDevice_Is_iPhone6)
{
if(IOS_VERSION_9_OR_ABOVE)
return sizefont-1;
return sizefont;
}
else if (kDevice_Is_iPhone6)
{
if(IOS_VERSION_9_OR_ABOVE)
return sizefont+1;
return sizefont+2;
}
else if (kDevice_Is_iPhone6Plus)
{
if(IOS_VERSION_9_OR_ABOVE)
return sizefont+2;
return sizefont+3;
}else
{
if(IOS_VERSION_9_OR_ABOVE)
return sizefont-1;
return sizefont;
}
}
在这里我用的是最笨的一种方法,逐个判断设备类型,再判断ios系统,再决定在设置原有字号的基础上是增加还是减小。
(因为4和5设备宽度是相同的,所以字号个人设置的是一样的,在6上是在4的基础上字号都增加了2,6p上在4的基础上都增加3,区分ios8和ios9时,ios9的字号均比ios8的字号小一号,这只是个人设置,可以根据不同情况设置不同的字号增加和减少)
6.写好内联函数之后,就是使用了,在这里我也用了一个宏:
//正常字体
#define FontSize(sizefont) [UIFont systemFontOfSize:sizeValue(sizefont)]
//加粗字体
#define FontBoldSize(sizefont) [UIFont boldSystemFontOfSize:sizeValue(sizefont)]
7.在项目中我们就可以用 xx.font = FontSize(sizefont) 来设置字体,就可以自动根据不同的设备和ios系统来分别适配,

在这里需要补充的是,内联函数是指用inline关键字修饰的函数。在类内定义的函数被默认成内联函数。为频繁使用、并且过程不大的小型函数设计的。
这是正值升级ios9时所遇到的一个字体适配的问题,当时就用了这个思路解决的,现在拿出来给大家分享一下,技术不足之处,还请大家见谅!
iOS布局---pch头文件设置和字号适配的更多相关文章
- PyCharm 头文件设置及作用
PyCharm 头文件 设置 进入File --->settings---->Editor---->File and Code Templates----->Python Sc ...
- Xcode 6 下添加pch头文件
没错了,Xcode 6 有着许多坑,例如新建的工程里没有默认的pch文件,当然本质上应该是为了提高编译的速度,但却让开发略微有点不方便. 话不多说,其实新建很简单 1.先新建一个PCH文件 2.设置头 ...
- iOS import framework头文件时报错could not build module xxx
导致这个错误的原因有多种: 1.库的search paths没有设置对. 2.库里面某些头文件找不到. 而导致.h头文件找不到的原因也有多种: (a)search paths没设置对,文件可能换过位置 ...
- html头文件设置常用之<meta>设置
也许很多开发人员并没有重视meta标签,我就是其中一个,但是meta标签的功能很强大,下面就来说说meta标签! <meta http-equiv="pragma" cont ...
- pch头文件
1.command+N ---> Other ---> PCH File 2.点击工程 ---> Build Settings ---> 搜索框中输入pref ---> ...
- iOS:PrefixHeader / 头文件 / 宏定义(18-03-02更)
宏定义,不一定放在PCH文件,可能放在一个.h文件,再用PCH包含进来. 1.屏幕尺寸 // 屏幕尺寸 #define kSCREEN_WIDTH [UIScreen mainScreen].boun ...
- .pch头文件的添加
在工程中找Building Settings --> language -->prefix Header -->填写.pch的路径
- xhtml头文件设置
设置字符集编码: <head> <meta http-equiv="Content-Type" Content="text/html" cha ...
- html头文件设置常用之<meta>设置缓存
<meta http-equiv="pragma" content="no-cache">,pragma与no-cache用于定义页面缓存,不缓存页 ...
随机推荐
- Deutsch lernen (03)
1. das Gewerbe, - 行业 Was ist Ihr Gewerbe? Welches Gewerbe treibt er? treiben - trieb - getrieben 从事 ...
- Python学习①. 基础语法
Python 简介 Python 是一种解释型,面向对象的语言.特点是语法简单,可跨平台 Python 基础语法 交互式编程 交互式编程不需要创建脚本文件,是通过 Python 解释器的交互模式进来编 ...
- 通过Static 字段来维护状态是不是一个好主意
static是申明静态字段.静态方法或者静态类的修饰符.使用static申明的字段属于类型本身而不属于任何字段,声明的类也具有一些特别特性,比如不能实例化,不能继承等.用通俗化的语言来说,static ...
- HttpRunnerManager 搭建使用方法
HttpRunnerManager Design Philosophy 基于HttpRunner的接口自动化测试平台: HttpRunner, djcelery and Django_. HttpRu ...
- [luogu4251 SCOI2015] 小凸玩矩阵 (二分图最大匹配)
传送门 Description Input Output 输出包含一行,为选出的 n 个数中第 k 大数的最小值. Sample Input 输入样例1: 2 3 1 1 2 4 2 4 1 输入样例 ...
- VirtualBox安装增强包实现文件共享
环境: win10 64位 Virtualbox 5.1.30 ubuntu-16.04.3-server-amd64.iso 1. 安装好ubuntu后,打开virtualbox安装路径文件夹,找到 ...
- 爬虫系列(八) 用requests实现天气查询
这篇文章我们将使用 requests 调用天气查询接口,实现一个天气查询的小模块,下面先贴上最终的效果图 1.接口分析 虽然现在网络上有很多免费的天气查询接口,但是有很多网站都是需要注册登陆的,过程比 ...
- 26.bulk批量操作
主要知识点 1.bulk语法 2.bulk使用时的注意事项 3.bulk size 对es性能的影响 一.bulk语法 每一个操作要两个json串(delete操作除外),每个json串占一行 ...
- springcloud(一):初识springcloud
研究了一段时间Spring Boot了准备向Spring Cloud进发,公司架构和项目也全面拥抱了Spring Cloud.在使用了一段时间后发现Spring Cloud从技术架构上降低了对大型系统 ...
- JUnit单元测试实践:测试工具类和方法(EmptyUtils)
以前的时候(读大学时),我认为写单元测试太费事了.现在,我改变看法了. 工作中,为了提高Web开发的质量和效率,近期又为了保证自己的工具类等一系列可复用组件的质量,我煞费苦心地开始认真学习和撰写单元测 ...