加载第三方字体
获取当前系统支持字体册
1 | UIFont.familyNames.forEach { (familyName) in |
使用指定字体
1 | let font = UIFont(name: "PingFangSC-Regular", size: 18) |
静态加载
该方式简单直接,只需在工程中包含字体文件,并在info.plist声明便可使用.
添加字体文件
info.plist修改
- 增加
Fonts provided by application
字段 - 在该字段下添加引入的字体文件名
- 增加
动态加载
通过指定字体文件路径加载,该种方式可配合 网络下发/字体加密 使用.
1 | /// 加载本地字体文件 |
动态下载苹果提供的多种中文字体
从 iOS 6 开始,苹果提供了一个新的 API 可以让我们动态下载苹果提供的额外字体。并且,这些字体是下载到系统中,也就是说,如果其他 App 也使用了这个字体或者 App 删除后重装时是无需再额外下载这个字体的。
判断字体是否存在
1
2
3
4if let aFont = UIFont(name: fontName, size: 12),
aFont.fontName == fontName || aFont.familyName == fontName{
// 存在
}下载(具体代码请参照swift Demo)
1
2
3
4
5
6let attrs = [kCTFontNameAttribute:fontName]
let desc = CTFontDescriptorCreateWithAttributes(attrs as CFDictionary)
let descs = [desc]
CTFontDescriptorMatchFontDescriptorsWithProgressHandler(descs as CFArray, nil) { (state, progressParameter) -> Bool in
// 下载
}
注意点
iOS 9 以下 系统 默认没有
PingFang
系列字体.使用
UIFont
时name
使用字体postScriptName
.(有些字体文件与真实名称不符),可以使用字体册查看具体名称.
附录:
- iOS 11系统提供字体
1 | Copperplate |