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

Xamarin Forms中Font Icons显示错误符号问题求助

问题原因及解决思路

1. 字体文件生成操作配置错误

  • 检查项目中fontello.ttf文件的属性:
    • 生成操作需设置为Embedded Resource(嵌入式资源)
    • 复制到输出目录需设置为如果较新则复制
  • 开发环境本地存在字体文件时即使配置错误也可能正常加载,打包时未嵌入资源就会导致设备上 fallback 到系统字体,渲染 Unicode 私域字符时出现乱码。

2. 发布裁剪/字体子集化优化误删字符

.NET MAUI/Xamarin 发布生产包时默认会开启裁剪优化,同时对字体做子集化处理,仅保留检测到的用到的字符。由于图标字符是通过常量字符串的 Unicode 编码引用,子集化工具通常无法识别,会将这些私域字符从打包后的字体文件中移除,导致无对应字形渲染。
解决方法:在项目.csproj文件中添加如下配置,关闭字体子集化或配置裁剪规则:

<PropertyGroup>
  <!-- 关闭全局MAUI字体子集化 -->
  <DisableMauiFontSubsetting>true</DisableMauiFontSubsetting>
</PropertyGroup>

<ItemGroup>
  <!-- 显式声明字体资源,也可单独针对该字体禁用子集化 -->
  <MauiFont Include="Resources/Fonts/fontello.ttf" Alias="Fontello" />
  <!-- 如仍有问题可将当前程序集加入裁剪根目录,避免常量被裁剪 -->
  <TrimmerRootAssembly Include="TestApp" />
</ItemGroup>

3. 代码文件编码异常

检查FontelloFont类对应的.cs文件编码,需设置为**UTF-8 带 BOM(签名)**格式,否则编译时 Unicode 转义字符可能被解析错误,不同环境编译出的包字符表现不一致。可通过VS的「另存为-保存选项-编码」修改文件编码。

4. 字体别名冲突

如果设备上存在同名Fontello的系统字体,应用加载时会优先调用系统字体导致渲染错误,可将ExportFont的Alias修改为更独特的命名,例如TestAppFontello,同步修改Label的FontFamily属性即可。

5. 字体文件本身损坏

重新从 Fontello 官网导出完整的ttf字体包,替换项目内的旧文件后重新打包测试。

验证方法

先打包未开启裁剪优化的Debug测试包安装验证,如果Debug包正常而Release包异常,即可定位为裁剪/子集化导致的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 20:09:04