iOS如何获取所有已安装字体(含自定义字体)的列表?
获取iOS设备上所有已安装字体(含自定义字体)的解决方案
问题原因
UIFont.familyNames 和 CTFontManagerCopyAvailableFontFamilyNames() 仅返回系统内置字体和当前App内嵌的字体,无法覆盖iOS 16开始支持的用户手动安装的自定义字体。
解决方法
使用CoreText框架提供的 CTFontManagerCopyEnabledFontFamilyNames() 接口,它会返回设备上所有已启用的字体家族名称,包含用户安装的自定义字体。
代码示例(Swift)
- 导入CoreText框架:
import CoreText
- 实现获取字体列表的方法:
func fetchAllInstalledFontFamilies() -> [String] { // 转换为Swift字符串数组 let enabledFontFamilies = CTFontManagerCopyEnabledFontFamilyNames() as [String] // 可选:对列表排序,提升可读性 return enabledFontFamilies.sorted() }
扩展:获取字体家族下的具体字体
如果需要获取每个字体家族下的具体字体(如不同字重、样式),可遍历家族名调用 UIFont.fontNames(forFamilyName:):
func fetchAllFonts() -> [(familyName: String, fontNames: [String])] { let allFamilies = fetchAllInstalledFontFamilies() return allFamilies.map { family in let fontNames = UIFont.fontNames(forFamilyName: family).sorted() return (familyName: family, fontNames: fontNames) } }
注意事项
- 该接口支持iOS 13及以上系统,iOS 16及以上才能获取到用户安装的自定义字体。
- 无需申请额外权限,直接调用即可。
内容的提问来源于stack exchange,提问作者ixany
相关产品推荐
相关产品推荐

