swift实现动态字体

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了swift实现动态字体相关的知识,希望对你有一定的参考价值。

参考技术A 手动设置系统字体大小,App里面的字体能跟随发生变化,并有最大最小字体限制。

借助runtime,在app启动的时候交换方法实现。
特点:需要重启app才能生效。无侵入,只需要添加一个UIFont分类,并在appdelegate里面调用交换方法。对整体项目改动小。

① App内设置字体大小,选择字体后,发送通知。切回到你需要改变的界面上时,在收到通知的方法里改变当前界面字体。(微信)
② 调整系统字体大小,切换到App内,字体大小自动更改,用DynamicType实现(QQ)
特点:app内实时刷新。可以整体替换,第三方重新pod,但项目整体改动较多
③ 保存字体大小到本地,所有用到字体的地方实时获取或刷新

采用:app内实时刷新

2.1 整体全部手动替换,搜索所有的systemFont,改为xx_systemFont,第三方重新pod,但项目整体改动较多,有风险
2.2 几个核心页面做下适配,其他不管

采用:6个核心页面做下适配

添加一个UIFont分类,更改systemFont类方法的实现

1.注册一个字体改变的通知。选择字体后,发送通知。切回到你需要改变的界面上时,在收到通知的方法里改变当前界面字体。(微信)
2.用DynamicType实现(QQ)
效果:调整系统字体大小,切换到App内,字体大小自动更改
缺点:字体大小只能是给定的10种类型之一

3.保存字体大小到本地,所有用到字体的地方实时获取或刷新

全局替换系统字体方法,会有个问题:很多地方view大小没做适配。采用适配4、5个核心页面的方案。
实现方法:给UIFont分类添加新的方法,需要适配的地方把systemFont改为xx_systemFont即可
特点:哪里需要适配就改哪里,灵活度和自由度自己控制

1、Method 'initialize()' defines Objective C class method 'initialize', which is not permitted by Swift
Swift4开始废弃load方法和initital方法了,写个类方法交换实现,然后直接在appdelegate里面调用类方法即可。UIButton可行,但是UIFont不可行(UIFont是类方法,写错了就不生效)。
2、UIFont的systemFont设置了没生效,因为systemFont是类方法,写错了
3、百度到的一些方案遇到些问题UILabel的font方法获取不到,willMove(toSuperview:)会出现UIButtonLabel的情况,属性字符串的兼容情况等。

ios10的一些玩意儿:Dynamic Type
Swift黑魔法 - Runtime

Swift 3 Eureka Forms 更改按钮行字体颜色

【中文标题】Swift 3 Eureka Forms 更改按钮行字体颜色【英文标题】:Swift 3 Eureka Forms change button row font color 【发布时间】:2017-03-13 21:13:32 【问题描述】:

我正在使用 Swift 3 创建一个 IOS 应用程序并实现 Eureka Forms。作为表单的一部分,我有一个用作删除按钮的按钮行。因此,我希望将文本颜色更改为白色。

我尝试了以下方法,但是单元格文本颜色会引发错误。关于我如何正确实现这一点的任何想法?

+++ Section("Delete Item")
  <<< ButtonRow() 
  $0.title = "Delete"
  .cellSetup() cell, row in
    cell.backgroundColor = UIColor.red
    cell.textLabel?.textColor = UIColor.whiteColor()
  .onCellSelection   cell, row in self.deleteItem() 

【问题讨论】:

我的回答对你有帮助吗? 【参考方案1】:

你很接近,你必须使用tintColor而不是textColor,使用这个代码

 <<< ButtonRow() 
      $0.title = "Delete"
      .cellSetup() cell, row in
          cell.backgroundColor = UIColor.red
          cell.tintColor = UIColor.white
      

希望对你有帮助

【讨论】:

嘿,谢谢你的想法,对不起。我已经离开我的开发机器几天了,但希望今晚回来尝试一下 @MichaelMoulsdale 好的,让我知道

以上是关于swift实现动态字体的主要内容,如果未能解决你的问题,请参考以下文章

UILabel 动态获取字体大小 - swift 3

如何在 Xcode 中增加字体大小以实现 swift [重复]

uitableviewcell 具有动态高度或减小字体大小以将多行放入一个单元格

Swift:如何让 UILabel 从另一个 UIlabel 继承字体大小?

Js动态设置rem来实现移动端字体的自适应代码

Swift 3 Eureka Forms 更改按钮行字体颜色