目前主流app都已支持动态字体,假如我们的app不支持,用户在不同app之间切换的时候就会感觉很唐突,甚至会因为阅读体验的问题而之间删除
支持动态字体
iOS App如何支持动态字体呢?我们需要为显示文本的组件,如UILabel、UITextView、UIButton指定自动调整大小的字体,比如为UILabel增加动态字体支持的代码。
label.font = UIFont.preferredFont(forTextStyle: .body)
label.adjustsFontForContentSizeCategory = true
首先,我们使用了UIFont.UITextStyle的.body来创建一个UIFont赋值给label的font属性,然后把改Label的adjustsFontForContentSizeCategory设置为true让其响应用户的动态字体设置。这个属性默认就为true,假如我们不想让文本自动支持动态字体,克设置为false。目前ios系统为我们提供了Body等11种字体风格,其他可在官方《Human Interface Guidelines》文档查看他们的规范
为第三方字体库加入动态字体支持
绝大多数情况下,我们应该使用iOS系统提供的内置字体库,但也有一些例外,例如使用自定义字体库来。第三方字体库支持代码如下
guard let theThirdPartyFont = UIFont(name:"theThirdPartyFont",size: UIFont.labelFontSize) else {
return
}
label.font = UIFontMetrics(forTextStyle: .headline).scaledFont(for: theThirdPartyFont)
label.adjustsFontForContentSizeCategory = true
第一步是通过传递字体库的名字,来加载并初始化类型为UIFont的对象customFont。
第二步是传入字体风格.headline,来初始化一个UIFontMetrics的对象。
第三步是把customFont传入scaledFont(for font: UIFont) -> UIFont方法,并把返回值赋给 Label 的font。这样label就能即使用第三方的字体库又能支持动态字体