Xcode14.1+SwiftUI自定义UIFont失败,求解决方案
解决SwiftUI项目中Poppins自定义字体加载失败及预览报错问题
针对你在Xcode14.1 SwiftUI项目中添加Poppins字体遇到的字体不加载、视图不渲染、预览报错问题,按以下步骤排查解决:
一、修复字体不加载问题(核心)
1. 检查字体文件的Target Membership
选中每个Poppins的.ttf文件,查看右侧Xcode面板的Target Membership区域,确保你的项目主Target处于勾选状态。未勾选的字体文件不会被打包进App,自然无法加载。
2. 验证Info.plist路径与实际文件位置一致
- 确认你的
Fonts是黄色组(而非蓝色文件夹引用),且所有.ttf文件确实存放在项目根目录的Fonts文件夹中。 - 检查
UIAppFonts数组里的路径拼写:比如Fonts/Poppins-Regular.ttf的大小写、文件名后缀必须和实际文件完全匹配,不能有空格或拼写错误。
3. 使用字体的内部PostScript名称(而非文件名)
很多字体的文件名和内部名称不一致,比如Poppins-Regular.ttf的内部名称可能是Poppins Regular(无连字符)。你需要用正确的内部名称调用:
- 调整
printFonts的调用时机:不要在App的init里调用(此时字体还未完成加载),改为在主视图的onAppear中触发:struct ContentView: View { var body: some View { Text("Hello!") .onAppear { printFonts() } } func printFonts() { let fontFamilyNames = UIFont.familyNames for familyName in fontFamilyNames { print("----------") print("Font Family Name -> [\(familyName)]") let names = UIFont.fontNames(forFamilyName: familyName) print("Font Names ==> [\(names)]") } } } - 运行App后,在控制台找到
Poppins家族下的具体字体名称,比如Poppins-Regular或Poppins Regular,然后在代码中使用这个名称:Text("Hello!") .font(Font.custom("Poppins Regular", size: 18)) // 替换为实际打印出的名称 - 也可以直接用Mac字体册打开
.ttf文件,查看字体信息里的PostScript名称,这就是代码中需要用的字符串。
二、解决Xcode预览报错「ambiguous use of 'font'」
这个错误通常是命名冲突导致的:
- 检查你的代码中是否有自定义的
font扩展方法,比如给View添加了同名的font方法,和SwiftUI原生方法冲突。 - 如果项目中同时导入了
UIKit和SwiftUI,避免直接混用类型,明确区分调用的是SwiftUI的Font还是UIKit的UIFont。 - 尝试清理项目缓存:执行
Command+Shift+K清理构建文件夹,然后重启Xcode,再重新运行预览。
额外验证步骤
- 重启Xcode,清理构建文件夹(
Command+Shift+K)后重新构建。 - 检查App的打包内容:选择Product -> Show Build Folder in Finder,找到App包,右键显示包内容,确认
Fonts文件夹下的所有.ttf文件都存在。
内容的提问来源于stack exchange,提问作者Justin Erswell
相关产品推荐
相关产品推荐

