码迷,mamicode.com
首页 > 移动开发 > 详细

iOS布局---pch头文件设置和字号适配

时间:2016-04-14 17:29:02      阅读:464      评论:0      收藏:0      [点我收藏+]

标签:

 

我设置的字号适配需要用到全局引用文件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头文件设置和字号适配

标签:

原文地址:http://www.cnblogs.com/yujinzhong/p/5391730.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!