Android可渲染的自定义字体在iOS无法显示,按规范操作仍未解决
iOS端自定义字体不显示排查方案
确认字体文件名与PostScript名称匹配
iOS识别字体依赖PostScript名称而非文件名,你可以通过以下方式确认:- Mac系统双击字体文件打开Font Book,顶部显示的名称即为PostScript名称(例如可能是
FaktPro-Normal而非fakt_pro_normal) - 用代码打印设备可用字体列表验证:
import { Platform } from 'react-native'; if (Platform.OS === 'ios') { require('react-native').NativeModules.RNFontManager.getFonts((err, fonts) => { console.log('可用字体列表:', fonts); }); }
确保样式代码中使用的是这个PostScript名称,而非本地文件名。
- Mac系统双击字体文件打开Font Book,顶部显示的名称即为PostScript名称(例如可能是
检查Info.plist的字体注册配置
iOS要求在Info.plist中声明使用的自定义字体,即使执行过react-native-asset也可能出现自动配置失效的情况。手动添加配置:
打开ios/[你的项目名]/Info.plist,添加Fonts provided by application数组,将字体文件名填入:<key>UIAppFonts</key> <array> <string>fakt_pro_normal.otf</string> <string>fakt_pro_medium.otf</string> </array>验证Copy Bundle Resources的有效性
虽然你已添加字体到该列表,仍需确认:- 字体文件已勾选对应目标项目
- 右键点击字体文件选择
Show in Finder,确认文件实际路径与项目引用路径一致,无缺失或重复 - 执行
Product > Clean Build Folder清理Xcode缓存后重新编译
排查字体文件兼容性
部分Windows优化的OTF字体可能不兼容iOS,可通过以下方式验证:- 用Font Book打开字体,查看是否有报错提示
- 将字体转换为TTF格式,或重新下载官方标注支持iOS的版本
确认样式中的字体名称正确
示例正确写法:const styles = StyleSheet.create({ text: { fontFamily: 'FaktPro-Normal', // 此处为PostScript名称,非文件名 fontSize: 16, }, });重新执行资源关联流程
若npx react-native-asset未生效,按以下步骤重试:- 删除
ios/build文件夹 - 运行
npx react-native-asset - 用Xcode重新打开项目并编译
- 删除
内容的提问来源于stack exchange,提问作者Onyx
相关产品推荐
相关产品推荐

