ios动态注册加载字体文件方法,无需在Info.plist文件中配置

extension UIFont {
    /// 动态字体获取
    static func font(name: String, size: CGFloat, of type: String = "ttf") -> UIFont {
        let fontName = loadFontFile(name, ofType: type)
        return UIFont.init(name: fontName, size: size) ?? UIFont.systemFont(ofSize: size)
    }
    
    /// 加载本地字体
    static func loadFontFile(_ name: String, ofType type: String = "ttf", target bundle: Bundle = .main) -> String {
        var fullName: String = ""
        guard let path = bundle.path(forResource: name, ofType: type) else {
            return ""
        }
        if let fontData = NSData(contentsOfFile: path) {
            fullName = registerFont(fontData: fontData)
        }
        return fullName
    }
    
    /// 动态注册字体文件
    static func registerFont(fontData: NSData) -> String {
        // ...通过CGDataProvider承载生成CGFont对象
        let fontDataProvider = CGDataProvider(data: CFBridgingRetain(fontData) as! CFData)
        let fontRef = CGFont(fontDataProvider!)!
        // ...注册字体
        var fontError = Unmanaged<CFError>?.init(nilLiteral: ())
        CTFontManagerRegisterGraphicsFont(fontRef, &fontError)
        // ...获取了字体实际名字
        let fullName: String = fontRef.fullName! as String
        let postScriptName: String = fontRef.postScriptName! as String
        return fullName
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容