美文网首页知识点iOS-适配iOS 临点记录
iOS Xib/Storyboard 中,字号适配

iOS Xib/Storyboard 中,字号适配

作者: iOS_永宝 | 来源:发表于2016-06-01 15:45 被阅读3075次

    本文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

    对于这三种实现方式,当然仁者见仁智者见智了,大家有什么好的做法,欢迎留言!

    相关文章

      网友评论

      • jazzfly:利用第三种,创建UILabel+category拖到项目里面,发现自定义方法没有调用,怎么破?
      • 89848af90932:方案3报错 reason: 'This coder requires that replaced objects be returned from initWithCoder:
        89848af90932:自己看错了不好意思
      • Code丶Ling:请问下swift中能用runtime做吗
      • ArchLL:runtime这个方法是不错,但是你后面两种方法缺少区别哪些控件需要字体适配,然后再做处理
      • 琥珀之剑:请问swift怎么办
      • 卧龙小:谢谢楼主,用第三种方式的时候,程序不走扩展类 咋回事?
      • MyiOS:您好 , 我按照您的第二种方法做了 , 但是xib上方没有 FontSize6Plus ,怎么解?
        MyiOS:@iOS_Ever 非常感谢
        iOS_永宝:@MyiOS 检查 Storyboard,拖一个 UILabel 上去,然后设置 UIView 的 Class 为自定义的 AdapterLabel。
      • 字母B一路向北:楼主你有runtime方法实现的demo吗?还有问一下这种方式是不是就类似与天天头条,设置以后,所有全局的字体都可以发生改变
        字母B一路向北:@字母B一路向北 ok,谢啦!
        iOS_永宝:@字母B一路向北 和天天头条不一样;那种是自定义相关控件,更改字体时,直接发送个通知;
      • 凯文Kevin21:楼主,用runtime这个写的怎么用啊。可以具体讲一下嘛。不是很懂,
        凯文Kevin21:@IOS_Ever 好的。。。
        iOS_永宝:@七秒小鱼人 建议先找几篇博客,研究下runtime;然后再看下 method swizzling;之后就会感觉豁然开朗了
      • tztTzt:楼主好人:+1::+1::+1::+1: 突然发现runtime可以做好多牛逼的事情 问下自定义的方法里面为什么自己调用下自己的方法呢
        iOS_永宝:@wry如意 load 方法里,自定义方法和initWithCoder方法的具体实现,已经被runtime交换了;调用自己的方法,其实,就是调用的initWithCoder方法;有点绕,谷歌下,method swizzling就明白了;

      本文标题:iOS Xib/Storyboard 中,字号适配

      本文链接:https://www.haomeiwen.com/subject/ezyhdttx.html