SKLabelNode无法使用SFMono-Light字体,编辑器可用代码不行
问题分析与解决方案
你遇到的问题核心在于代码中使用的字体名称可能和系统识别的不一致,或者字体没有正确打包到应用程序中——Xcode编辑器因为缓存或直接调用系统字体,所以能正常显示,但运行时App无法找到字体文件。
解决步骤:
1. 确认字体的正确系统名称
编辑器里显示的字体名(比如"SFMono-Light")是显示名称,而代码需要使用字体的PostScript名称,两者可能存在差异。你可以通过两种方式获取正确名称:
- 打开Mac的「字体册」,找到SFMono-Light,右键选择「显示字体信息」,查看「PostScript名称」;
- 在代码中临时添加打印所有可用字体的代码,搜索SFMono相关条目:
// 在ViewController的viewDidLoad中添加 UIFont.familyNames.forEach { familyName in print("Family: \(familyName)") UIFont.fontNames(forFamilyName: familyName).forEach { fontName in print(" Font: \(fontName)") } }
运行后在控制台找到SFMono系列的字体,替换代码中的skLabel.fontName为正确的名称。
2. 确保字体已正确嵌入项目
即使系统里有该字体,打包成App后也需要把字体文件嵌入到安装包中:
- 将SFMono-Light的字体文件(比如
SFMono-Light.ttf)拖入Xcode项目,勾选「Copy items if needed」,并确保选择了你的目标项目; - 打开项目的「Build Phases」,检查「Copy Bundle Resources」列表中是否包含该字体文件,如果没有就手动添加;
- 打开
Info.plist,添加UIAppFonts(或显示名称「Fonts provided by application」)数组键,将字体文件名(比如SFMono-Light.ttf)添加到数组中。
3. 清理缓存并重新构建
完成上述步骤后,执行「Product -> Clean Build Folder」,然后重新运行项目,应该就能正常加载字体了。
内容的提问来源于stack exchange,提问作者Damiano Miazzi
相关产品推荐
相关产品推荐

