Swift中自定义字体真机调试变回系统字体,如何解决?
这个问题我碰到好多次了,真机调试时自定义字体失效是iOS开发里挺常见的坑,给你列几个最有效的排查和解决步骤:
检查字体文件的Target Membership
这是最容易忽略的点!Mac端运行正常是因为资源能被读取,但真机需要确保字体文件被正确关联到你的app target。操作方法:选中项目里的字体文件,打开右侧的属性检查器(Inspector),在「Target Membership」区域勾选你的应用target,确保它被打进制包。确认Info.plist里的字体文件名完全匹配
iOS真机对文件名的大小写和后缀非常敏感,Mac端可能宽松一些。你要保证Fonts provided by application数组里的每一项,都和字体文件的实际名称完全一致,包括.ttf/.otf这些后缀,大小写也不能错。比如文件是CustomFont-Bold.ttf,就不能写成customfont-bold.ttf。验证字体的真实内部名称
有时候字体文件的文件名和它内部注册的字体名称不一样!这时候你需要用代码打印出设备上所有可用的字体,找到它的真实名字:// 在ViewController的viewDidLoad里添加这段代码 override func viewDidLoad() { super.viewDidLoad() // 打印所有可用字体 for familyName in UIFont.familyNames { print("字体家族:\(familyName)") for fontName in UIFont.fontNames(forFamilyName: familyName) { print(" 字体名称:\(fontName)") } } }运行后看控制台输出,找到你要的字体对应的真实名称(比如文件名是
MyFont.ttf,但真实名称可能是MyFont-Regular),然后在代码里用这个真实名称来设置字体,而不是文件名。清理缓存并重启Xcode
有时候Xcode的缓存会导致资源没有正确打包。执行这几步:- 按
Cmd+Shift+K清理项目 - 按
Cmd+Option+Shift+K彻底清理构建缓存 - 关闭Xcode,重新打开后再build到真机
- 按
检查字体是否被打包进app包
右键项目里的Products文件夹下的app文件,选择「Show in Finder」,然后右键app包选择「Show Package Contents」,看看里面有没有Fonts文件夹,你的字体文件是否在里面。如果没有,说明字体文件没有被正确添加到target,回到第一步重新设置。确认设备系统支持该字体
部分特殊格式的字体(比如某些OTF变体)可能在旧版本iOS上不支持。如果你的测试设备系统版本比较老,可以尝试升级系统,或者换用兼容性更好的字体文件(比如转换成TTF格式)。
内容的提问来源于stack exchange,提问作者Siratee K.

