文章

iOS 项目中添加自定义字体

摘要:

  1. 往项目中添加自定义字体
  2. 项目中运行时, 通过网络下载并使用字体

1. 项目中添加静态字体

  1. 准备好字体资源,直接拖拽到项目中,选择好所属 target
  2. Info.plist 文件完整添加字体资源, 注意后缀要完整写上

添加后效果如图, 也可以使用源文件的方式,直接拷贝下面实例代码添加

Info.plist 源码如下:

1
2
3
4
5
<key>UIAppFonts</key>
<array>
    <string>DynamicFont-Regular.ttf</string>
    <string>my-Regular.ttf</string>
</array>

添加完成之后, 项目中就能直接使用该字体了, 具体的字体名称可以通过打印 UIFont.familyNames 来查看.

2. 运行时注册字体并使用

项目中会有一些场景, 需要在运行时下载字体并使用.

核心就是向 CTFontManagerRegisterGraphicsFont 注册字体. 示例代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// 首先获取资源 URL, 然后通过路径注册 (如果是本地文件)
let fileUrl = Bundle.main.url(forResource: "sa-digital-number", withExtension: ".ttf")!
registerFont(url: fileUrl)


// 通过 URL 注册字体 (也可以自己封装通过 Data 来注册字体)
func registerFont(url: URL) {
        
    if let fontDataProvider = CGDataProvider(url: url as CFURL),
       let newFont = CGFont(fontDataProvider),
       CTFontManagerRegisterGraphicsFont(newFont, nil)
    {
        // Font registration successful
    } else {
        if let error = CFErrorCreate(nil, 
                                     CFStringCreateWithCString(
                                        nil,
                                        "Failed to load font",
                                        CFStringBuiltInEncodings.UTF8.rawValue),
                                     0,
                                     nil) {
            let errorDescription = CFErrorCopyDescription(error)
            if let description = errorDescription {
                print("Failed to load font: \(description)")
                //CFRelease(description)
            }
        }
    }
}

同样的, 注册完成之后就可以使用了, 具体的字体名称可以通过打印 UIFont.familyNames 来查看.


THE END.

本文由作者按照 CC BY 4.0 进行授权