Xamarin iOS自定义字体无法在主Storyboard中显示的问题求助
解决Xamarin.iOS中自定义字体无法在Storyboard稳定显示的问题
我之前也碰到过一模一样的坑,自定义字体在Visual Studio的Storyboard里总是抽风,偶尔显示偶尔罢工,折腾了好久才摸清楚几个靠谱的解决办法,你可以按下面的步骤逐一排查:
1. 先确认字体的「真实内部名称」(最容易踩的坑!)
很多人以为字体文件名就是它的内部名称,但其实完全不是!比如你用的AgencyFB Bold,它的内部名称可能是AgencyFB-Bold或者Agency FB Bold(注意空格),和文件名大概率不一样。
怎么查?两个简单办法:
- 代码打印验证:在项目里加一段代码,运行后看控制台输出的字体列表,精准找到你的字体:
public override void ViewDidLoad() { base.ViewDidLoad(); foreach (var family in UIFont.FamilyNames) { Console.WriteLine($"字体家族: {family}"); foreach (var font in UIFont.FontNamesForFamilyName(family)) { Console.WriteLine($" 字体名称: {font}"); } } } - Mac上用Font Book查看:双击字体文件打开Font Book,标题栏显示的就是它的内部名称(比如「Agency FB Bold」)。
确认后记住这个名称:info.plist里的文件名要和实际文件完全匹配,而Storyboard里选字体时要选这个内部名称,不是文件名!
2. 核对Bundle资源配置的细节
虽然你已经设置了,但再仔细检查一遍,别放过任何细节:
- 选中字体文件,在属性面板里:
- Build Action必须是
BundleResource,不能错成其他选项 - Copy to Output Directory设为
Do not copy(这个是对的,因为字体要打包进app bundle,不是复制到输出目录)
- Build Action必须是
- 打开info.plist,确认
UIAppFonts(也就是「Fonts provided by application」)数组里的每一项,都和字体文件名完全匹配,包括大小写!iOS对文件名大小写敏感,AgencyFB.ttf和agencyfb.ttf会被当成两个不同的文件。
3. 彻底清理缓存(解决VS抽风的关键)
Visual Studio的缓存经常会搞事情,尤其是Storyboard相关的缓存。按这个步骤来:
- 完全关闭Visual Studio
- 删除项目根目录下的
bin和obj文件夹(直接删掉就行,重新生成会自动创建) - 清理Xamarin的缓存:
- Windows:删除
%LOCALAPPDATA%\Xamarin文件夹里的内容 - Mac:删除
~/Library/Caches/Xamarin文件夹里的内容
- Windows:删除
- 重启Visual Studio,重新生成整个解决方案,再打开Storyboard看看
4. 强制让iOS加载字体,再刷新Storyboard
有时候Storyboard编辑器没检测到新添加的字体,你可以先让App运行一次,让iOS加载字体,再回到VS:
- 在代码里手动设置一次该字体(比如在某个ViewController的
ViewDidLoad里):var testFont = UIFont.FromName("你的字体内部名称", 18); - 运行项目,确保App能正常启动(不用管字体是否显示在界面上,只要代码不报错就行)
- 回到Visual Studio,关闭并重新打开Storyboard,这时候字体列表应该会更新
5. 检查字体文件是否损坏
如果上面的方法都没用,可能是字体文件本身有问题:
- 换一个可靠的来源重新下载
AgencyFB Bold字体 - 在Mac上用Font Book打开字体,确认没有损坏(Font Book会提示字体是否有效)
按这些步骤走下来,应该能解决Storyboard里字体不显示的问题,我之前就是靠清理缓存+确认字体名称搞定的。
内容的提问来源于stack exchange,提问作者andreydimitro
相关产品推荐
相关产品推荐

