You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Xcode SwiftUI预览中显示自定义字体?

SwiftUI预览中自定义字体不生效的原因及解决方法

原因

SwiftUI预览的运行进程与正式App的运行环境存在差异:正式App启动时会自动读取Info.plist中UIAppFonts配置并注册字体,但预览进程不会自动执行这一流程,导致自定义字体未被系统字体库识别,最终Font.custom()只能 fallback 到系统字体。

解决方法

1. 确认字体名称的准确性

很多时候问题出在字体文件名≠字体内部的PostScript名称:

  • 用macOS「字体册」打开你的自定义字体文件
  • 右键选择「显示字体信息」,查看「PostScript名称」
  • 确保Font.custom()中传入的是这个PostScript名称,而非文件名

2. 在预览代码中手动注册字体

直接在预览提供者中添加字体注册逻辑,强制加载字体文件:

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        registerCustomFont()
        return ContentView()
    }
    
    static private func registerCustomFont() {
        guard let fontURL = Bundle.main.url(forResource: "MyFont-Regular", withExtension: "ttf"),
              let dataProvider = CGDataProvider(url: fontURL as CFURL),
              let cgFont = CGFont(dataProvider) else {
            print("无法加载自定义字体文件")
            return
        }
        
        var error: Unmanaged<CFError>?
        CTFontManagerRegisterGraphicsFont(cgFont, &error)
        
        if let error = error?.takeRetainedValue() {
            print("字体注册失败: \(error.localizedDescription)")
        }
    }
}

注意替换代码中的"MyFont-Regular"和"ttf"为你的字体文件名和后缀。

3. 清理缓存并重启Xcode

Xcode的缓存可能导致预览资源加载异常:

  • 执行菜单 Product > Clean Build Folder(快捷键⇧⌘K)
  • 完全退出Xcode后重新打开,再尝试预览

4. 检查字体文件的Target Membership

确保字体文件被正确关联到预览进程能访问的Target:

  • 在项目导航栏中选中字体文件
  • 打开右侧「检查器」面板,确认「Target Membership」中勾选了当前App的主Target

内容的提问来源于stack exchange,提问作者Dan Fabulich

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 17:32:42