本文Demo环境:Xcode 7.2.1
随着苹果设备尺寸越来越多,使用Xib、Storyboard + Autolayout 进行页面布局,已是大势所趋;但是,在实际应用中,发现字号适配,比较繁琐;由于5s 和 6 的PPI 一致,所以,一般美工要求在 5s 和 6 上,字号一样,在 6 Plus 上,字号要增大两号;但是由于苹果提供的布局方式中:Auto Layout 、Size Class 都无法准确区分出竖屏6Plus;所以,字号适配,遇到瓶颈;
解决方案,个人总结,共三种:
一 : Xib 、Storyboard 中的每个需要字号适配的元素都连线到实现文件中,即创建 IBOutlet 对象,然后在代码中,通过判断设备类型,通过代码,设置具体字号。此方式比较常见,但适配工作量较大;
二:分别创建UILabel、UIButton、UITextField 的子类(这里我们假设Xib 中需要适配字号的都是这三种类型),然后添加6Plus 字号属性,并添加 IBInspectable 关键字,这样,就可以直接在Xib/Storyboard 中设置其对应字号大小了。此方式避免了上一种方式中“需要一一创建IBIOutlet对象”,但是在Xib中设置起来,工作量,依旧不小;
AdapterLabel.h AdapterLabel.m Xib中,直接设置6Plus字号大小三:利用runtime,自定义initWithCoder方法,在自定义方法里,判断设备,设置字号;然后用自定义方法,替换系统默认实现方法;此方式,简单方便,工作量几乎为0,不用单独修改Xib、Storyboard中任何设置,也不用单独创建任何子类(变为创建Category了,😄);但是,缺点也显而易见,无法具体到某个页面、某个控件,进行单独的字号设置;
UILabel+Adapter.h UILabel+Adapter.m对于这三种实现方式,当然仁者见仁智者见智了,大家有什么好的做法,欢迎留言!
网友评论