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

SpriteKit中自定义字体无法通过代码加载问题求助

解决SpriteKit中代码设置自定义字体找不到的问题

这种情况我之前在SpriteKit项目里也踩过坑,核心原因基本都是Xcode没有把自定义字体正确打包进App Bundle——毕竟Xcode会做“智能优化”,如果它没检测到你在Storyboard或代码里明确引用了字体,就会跳过打包步骤。下面是几个排查和解决的方向:

  • 检查Info.plist的字体配置
    确保Info.plist里的Fonts provided by application(或者键名UIAppFonts)数组中,已经准确添加了你的字体文件名(比如Players-Bold.ttf,注意是文件名不是字体显示名)。如果字体放在子文件夹里,还要加上相对路径,比如Fonts/Players-Bold.ttf。

  • 确认字体文件的Target Membership
    选中你的字体文件(在Xcode的项目导航里),打开右侧的属性面板,检查Target Membership下是否勾选了当前的App Target。很多时候拖入字体文件时,这个选项会被默认忽略,导致字体没被打包。

  • 强制Xcode打包字体(破解Storyboard依赖)
    你遇到的“留着Storyboard标签就正常”的问题,本质是Xcode通过Storyboard的引用识别到需要打包字体。要摆脱这个依赖,可以:

    • 加一个隐藏的占位Label:在Storyboard里随便放个Label,设置成hidden = true或者移到屏幕外,字体选Players-Bold。Xcode会因为这个引用把字体打包进去,代码里就能正常调用了。
    • 或者在代码里加个无意义的引用:在App启动的地方(比如AppDelegate或者SceneDelegate)加一行let _ = UIFont(name: "Players-Bold", size: 12),让编译器知道你用到了这个字体,避免被优化掉。
  • 验证字体是否在Bundle中
    可以在App启动后打印Bundle里的所有字体文件,确认你的字体是否被正确打包:

    if let fontPaths = Bundle.main.paths(forResourcesOfType: "ttf", inDirectory: nil) {
        print("打包的字体文件:\(fontPaths)")
    }
    

    如果输出里看不到你的Players-Bold.ttf,就回到前两步检查配置。

  • 最后再确认字体的正确名称
    有时候字体的文件名和实际的字体名称不一致(比如文件名是Players-Bold.ttf,但实际字体名是Players Bold)。可以用下面的代码打印所有可用字体,找到你的字体对应的正确名称:

    for familyName in UIFont.familyNames {
        print("字体家族:\(familyName)")
        for fontName in UIFont.fontNames(forFamilyName: familyName) {
            print("  字体名称:\(fontName)")
        }
    }
    

    运行后搜索Players相关的条目,确保代码里的scoreLabel.fontName用的是输出里的准确名称。

内容的提问来源于stack exchange,提问作者5AMWE5T

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:45:29