导入字体
- 导入字体库(.ttf)到项目中(如果是SDK开发,则需要导入至bundle资源库中,不是则导入至项目文件夹下即可)
- 非SDK开发则在info.plist中加入Fonts provided by application key,在这个value数组下填入导入的字体的文件名称,若是SDK开发则需通过代码方式注册字体(如下)
import Foundation
import UIKit
//需要注册的字体文件名
let fontArray = []
enum RegisterFontError: Error {
case invalidFontFile
case fontPathNotFound
case initFontError
case registerFailed
}
class FontManager {
static func staticBundle() -> Bundle? {
guard let url = Bundle.main.url(forResource: "yourBundleName", withExtension: "bundle") else {
return nil
}
let bundle = Bundle(url: url)
return bundle
}
}
extension UIFont {
static func register(fileNameString: String, type: String) throws {
let frameworkBundle = FontManager.staticBundle()
guard let resourceBundleURL = frameworkBundle?.path(forResource:"/FontResource/" + fileNameString, ofType: type) else {
throw RegisterFontError.fontPathNotFound
}
guard let fontData = NSData(contentsOfFile: resourceBundleURL), let dataProvider = CGDataProvider.init(data: fontData) else {
throw RegisterFontError.invalidFontFile
}
guard let fontRef = CGFont.init(dataProvider) else {
throw RegisterFontError.initFontError
}
var errorRef: Unmanaged<CFError>? = nil
guard CTFontManagerRegisterGraphicsFont(fontRef, &errorRef) else {
throw RegisterFontError.registerFailed
}
}
static func registerFonts() {
fontArray.forEach { name in
try? UIFont.register(fileNameString: name, type: ".ttf")
}
}
}
然后在项目初始化的地方调用 registerFonts 方法注册字体
3.遍历系统字体,找到加入的字体名称(注意:导入的文件名称不一定是实际调用的字体名称,尤其是汉字文件名,实际是用拼音调用)
var i = 0
for family: String in UIFont.familyNames {
print("\(i)---项目字体---\(family)")
for names: String in UIFont.fontNames(forFamilyName: family) {
print("== \(names)")
}
i += 1
}
字体调用
UIFont(name: "font_name", size: 14)