http://www.jianshu.com/p/5815e81abb52

背景

  • 去年的六月份开始了一个新的项目,此项目支持的设备从4S开始一直到6+,也就是说屏幕的尺寸最小的320x480 最大的1242x2208 (不过目前好像大部分的App都会这样去支持),而客户那边有一个奇葩要求 就是所有的控件布局必须依据屏幕的尺寸等比缩放。当然这个对于iOS的开发来说的话还是比较容易实现的(iOS有个Autoresizing刚好是依据父视图的大小作等比缩放的)。

  • 项目就这样愉快的进行,然而当项目快要结束的时候,客户愤怒质问我们为什么字体大小没有根据屏幕作等比适配,再有几天的时间就要上线了,直到现在才发现这种天天在眼前晃荡的问题。。。。

  • 此时我们开发的内心是崩溃的。。。 因为项目非常赶时间,客户要求17天上线第一个版本,所有跟主流程相关的功能必须实现。当时为了赶时间 加上为了做等比适配,所有视图全部是用XIB拖出来的 字体都是直接设置在视图里面 没有抽出来 现在要是做字体的等比适配的话 这种大量完全没有技术含量的体力活让人很无力

解决方法

  • 新建一个UIButton的类别 重写 load 方法 利用OC的运行时 对所有的Button Label作处理(一般有文字的大部分是 Button Label)
    代码如下
    UIButton+MyFont.h
#import <UIKit/UIKit.h>#import <objc/runtime.h>/**
* 按钮
*/@interface UIButton (myFont)@end/**
* Label
*/@interface UILabel (myFont)@end

UIButton+MyFont.m

#import "UIButton+MyFont.h"//不同设备的屏幕比例(当然倍数可以自己控制)#define SizeScale ((IPHONE_HEIGHT > 568) ? IPHONE_HEIGHT/568 : 1)@implementation UIButton (myFont)

+ (void)load{
Method imp = class_getInstanceMethod([self class], @selector(initWithCoder:));
Method myImp = class_getInstanceMethod([self class], @selector(myInitWithCoder:));
method_exchangeImplementations(imp, myImp);
} - (id)myInitWithCoder:(NSCoder*)aDecode{
[self myInitWithCoder:aDecode];
if (self) {
//部分不像改变字体的 把tag值设置成333跳过if(self.titleLabel.tag != 333){
CGFloat fontSize = self.titleLabel.font.pointSize;
self.titleLabel.font = [UIFont systemFontOfSize:fontSize*SizeScale];
}
}
return self;
} @end@implementation UILabel (myFont) + (void)load{
Method imp = class_getInstanceMethod([self class], @selector(initWithCoder:));
Method myImp = class_getInstanceMethod([self class], @selector(myInitWithCoder:));
method_exchangeImplementations(imp, myImp);
} - (id)myInitWithCoder:(NSCoder*)aDecode{
[self myInitWithCoder:aDecode];
if (self) {
//部分不像改变字体的 把tag值设置成333跳过if(self.tag != 333){
CGFloat fontSize = self.font.pointSize;
self.font = [UIFont systemFontOfSize:fontSize*SizeScale];
}
}
return self;
} @end

实在不好意思,前段时间有点忙 附上demo地址

文/门前有棵葡萄树(简书作者)
原文链接:http://www.jianshu.com/p/5815e81abb52
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

iOS 关于字体根据不同屏幕尺寸等比适配的问题(zz)的更多相关文章

  1. iOS系统下 的手机屏幕尺寸 分辨率 及系统版本 总结

    今天  我对iOS系统下 的手机屏幕尺寸 分辨率 及系统版本做了一次系统总结 供大家参考. 首先 是系统:    随着iOS 系统不断升级,现在已经到iOS7.0了, 并且TA有了很多新变化,最震撼的 ...

  2. iOS 8版本信息与屏幕尺寸

    原文  http://www.cnblogs.com/smileEvday/p/iOS8.html   1.UIWindow的bounds iOS 7之前Window的bounds不会随着方向而变化, ...

  3. 【Android 应用开发】Android屏幕适配解析 - 详解像素,设备独立像素,归一化密度,精确密度及各种资源对应的尺寸密度分辨率适配问题

    . 作者 :万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/19698511 . 最近遇到了一系列的屏幕适配问题, 以及 ...

  4. Android屏幕适配解析 - 详解像素,设备独立像素,归一化密度,精确密度及各种资源对应的尺寸密度分辨率适配问题

    . 作者 :万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/19698511 . 最近遇到了一系列的屏幕适配问题, 以及 ...

  5. iOS屏幕尺寸和分辨率了解

    1.截至目前为止,主流的iOS设备屏幕有以下几种: ---------------  iPhone  ---------- --------  iPad ------------ 2.iOS设备屏幕分 ...

  6. iOS屏幕尺寸和分辨率

    iOS平台家族成员主要包括iPhone.iPod Touch和iPad,但是各类设备的分辨率各不相同,目前存在的尺寸主要有: iOS设备的尺寸多种多样,此外,屏幕的分辨率也有多种,总结如下表所示: 其 ...

  7. IOS 判断设备屏幕尺寸、分辨率

    根据屏幕尺寸和分辨率,ios现在数起来有6个版本. iOS 设备现有的分辨率如下: iPhone/iPod Touch 普通屏 320像素 x 480像素 iPhone .3G.3GS,iPod To ...

  8. IOS 屏幕尺寸

    型号 屏幕尺寸(英寸) 分辨率(pt) 像素分辨率(px)iPhone 3G 3.5 320*480 480x320iPhone 3GS   3.5 320*480 480x320iPhone4 3. ...

  9. IOS 屏幕尺寸、分辨率、点之间的相互关系

    iOS 设备现有的分辨率如下:iPhone/iPod Touch普通屏                         320像素 x 480像素       iPhone 1.3G.3GS,iPod ...

随机推荐

  1. Storm的BaseBasicBolt源码解析ack机制

    我们在学习ack机制的时候,我们知道Storm的Bolt有BaseBasicBolt和BaseRichBolt.在BaseBasicBolt中,BasicOutputCollector在emit数据的 ...

  2. jq倾斜的动画导航菜单

    效果预览网址:http://keleyi.com/keleyi/phtml/jqmenu/index.htm 支持IE.Chrome.火狐等浏览器 完整源代码,保存到HTML文件打开也可查看效果: & ...

  3. canvas实现抽奖大转盘

    这里不给用JS,下面地址有效果以及详细代码 效果地址:http://sandbox.runjs.cn/show/d2et4rys

  4. 原生JS:全局属性、全局方法详解

    全局属性.全局方法 原创文章,转摘请注明出处:苏福:http://www.cnblogs.com/susufufu/p/5853342.html 首先普及几个我总结的非常实用又很基础的知识:(呵呵,仅 ...

  5. 使用React制作一个可配置的页面生成器[0]

    背景 上班两年多,终于来到一家互联网公司,告别之前的朝九晚六的腐败生活,开始了11116的码农之旅. 因为公司做的是直播相关的业务,所以伴随着直播,不定期的就会有运营活动-.- 但是这类活动留给码农的 ...

  6. jQuery介绍 DOM对象和jQuery对象的转换与区别

    jQuery介绍 DOM对象和jQuery对象的转换与区别 jQuery介绍      jQuery: http://jquery.com/      write less, do more.   j ...

  7. iOS 获取用户授权的用户隐私保护-地图定位

    获取用户授权的用户隐私保护地图定位示例://导入定位框架#import<CoreLocation/CoreLocation.h>@interfaceViewController()< ...

  8. ORACLE动态采样分析

    td {border:solid #9ec9ec; border-width:0px 1px 1px 0px; padding:4px 0px;} table {border:1px solid #9 ...

  9. IO is frozen on database xxx, No user action is required

    最近遇到一起关于"I/O is frozen on database xxx. No user action is required. However, if I/O is not resu ...

  10. (转载)SQL去除回车符,换行符,空格和水平制表符

    http://www.cnblogs.com/insus/p/4815336.html MS SQL去除回车符,换行符,空格和水平制表符,参考下面语句,一般情况是SQL接受富文本或是textarea的 ...