React Native自定义Poppins字体不生效,求排查原因
以下是你可能出现操作疏漏的几个关键点,逐一排查:
检查react-native.config.js配置准确性
确保配置里的路径和字体实际存放位置完全匹配。如果你的ttf文件直接放在根目录的Assets文件夹下,配置应该是:module.exports = { assets: ['./Assets/'], };若
Assets下还有fonts子文件夹,路径要改成./Assets/fonts/,拼写错误或路径层级不对会导致字体无法被识别。确认字体内部名称与引用名一致
很多字体的文件名和内部注册名称不一致,比如下载的Poppins-Regular.ttf,内部名称可能是Poppins Regular(带空格)。- iOS:双击ttf文件打开字体册,顶部显示的就是字体内部名称
- Android:查看
android/app/src/main/res/font下的字体文件(执行npx react-native-assets后会自动复制到此),用字体工具查看内部名称
引用时必须使用内部名称,比如:
<Text style={{ fontFamily: 'Poppins Regular' }}>测试文本</Text>验证
npx react-native-assets执行结果
执行命令后查看控制台输出,确认是否显示成功将字体复制到iOS的Info.plist和Android的res/font目录。如果有报错(比如路径不存在、权限问题),先解决报错再重新执行。清理缓存并重启项目
React Native的资源缓存可能导致字体不更新,执行以下操作:# 清理Metro缓存 npx react-native start --reset-cache # 重启Android项目 npx react-native run-android # 重启iOS项目(或直接在Xcode中重新Build) npx react-native run-ios仅刷新模拟器无效,必须重启Metro服务和项目。
iOS端检查Info.plist配置
执行npx react-native-assets后,ios/[你的项目名]/Info.plist中应新增Fonts provided by application字段,包含你的Poppins字体文件名。如果没有,手动添加:<key>UIAppFonts</key> <array> <string>Poppins-Regular.ttf</string> <string>Poppins-Bold.ttf</string> </array>之后重新Build iOS项目。
Android端检查字体文件是否到位
查看android/app/src/main/res/font文件夹,确认存在Poppins字体文件(文件名会被转为小写,比如poppins_regular.ttf)。如果缺失,手动复制字体文件到该目录,同时确保android/app/build.gradle中包含:apply from: "../../node_modules/react-native/react.gradle"再重新Build Android项目。
内容的提问来源于stack exchange,提问作者Mike

