Mac OS快速查看扩展中如何使用自定义字体?
在QuickLook扩展中使用自定义字体的解决方案
可行,按以下步骤排查并修正即可:
确认字体文件的正确配置
除了勾选主应用和扩展的目标成员资格,还要检查扩展目标的「Copy Files」构建阶段:- 确保目标位置是
Resources - 勾选「Copy only when installing」选项
另外注意:字体文件名和其内部的PostScript名称可能不一致——打开Font Book,选中字体后查看PostScript名称,这才是NSFont(name:)需要传入的参数(比如文件名是MyCustomFont.ttf,实际名称可能是MyCustomFont-Regular)
- 确保目标位置是
单独配置扩展的Info.plist
主应用的ATSApplicationFontsPath配置不会作用于扩展,必须在扩展自身的Info.plist中添加该键:- 键名:
ATSApplicationFontsPath - 值:如果字体直接放在扩展的Resources目录下,填
.;如果放在子文件夹(比如Fonts),填Fonts/(注意末尾的斜杠)
- 键名:
手动注册字体(兜底方案)
如果上述步骤仍不生效,可在扩展初始化时手动加载并注册字体:private func registerCustomFont() { guard let fontURL = Bundle(for: type(of: self)).url(forResource: "MyCustomFont", withExtension: "ttf") else { print("自定义字体文件不存在") return } do { let fontData = try Data(contentsOf: fontURL) guard let provider = CGDataProvider(data: fontData as CFData), let cgFont = CGFont(provider) else { print("加载字体数据失败") return } var error: Unmanaged<CFError>? let success = CTFontManagerRegisterGraphicsFont(cgFont, &error) if !success, let error = error?.takeRetainedValue() { print("字体注册失败: \(error.localizedDescription)") } } catch { print("读取字体文件失败: \(error)") } }在扩展主视图控制器的
viewDidLoad方法中调用这个函数,之后再尝试通过NSFont(name:size:)获取字体。验证加载结果
注册完成后,可通过打印NSFontManager.shared.availableFonts或CTFontManagerCopyAvailableFontFamilyNames(),确认目标字体的名称已出现在列表中。
内容的提问来源于stack exchange,提问作者D. Mika
相关产品推荐
相关产品推荐

