React Native 用 Vector Icons 图标不显示怎么办?
我按照文档装了 react-native-vector-icons,也 link 了(用的是 RN 0.68),但图标死活不显示,只看到一个方框。试过重启 Metro 和重新 build,还是不行。
代码是这么写的:
import Icon from 'react-native-vector-icons/FontAwesome';
// 在组件里
<Icon name="rocket" size={30} color="#900" />
是不是还要手动配置什么?安卓和 iOS 都试了,都不行。
先说安卓的:
1. 下载 FontAwesome 的 ttf 字体文件,比如
FontAwesome5_Brands-Regular-Web.ttf这种,从 node_modules 里找,路径一般是node_modules/react-native-vector-icons/Fonts2. 把字体文件拷到
android/app/src/main/assets/fonts/目录,没这个目录就新建一个,注意是小写fonts,别拼错了3. 在
android/app/build.gradle里的apply from: "../../node_modules/react-native/react.gradle"下面加一行:4. 最后清一下缓存重 build:
cd android && ./gradlew clean && cd .. && npx react-native run-androidiOS 倒是简单点:
1. 同样把字体文件拖进 Xcode 项目里(在
ios/YourProjectName目录下),勾选Copy items if needed和Add to targets2. 在
Info.plist里加个键值对:Fonts provided by application,类型是 Array,每一项就是字体文件名(带后缀)3. 清 build folder 重跑:
cmd + shift + k或在 Xcode 里 Product > Clean Build Folder,然后重新 run对了,别用
<Icon />这种老写法了,新版本推荐直接用createIconSetFromFontello或者createIconSetFromIcoMoon这些,不过你这问题应该不是写法问题,是字体没加载进去。实在不行就先试试
npm install react-native-vector-icons@9.2.0,这个版本对 0.68 支持最稳,别用 10.x 的,坑比 9.x 多。react-native link了,尤其是 Vector Icons 这种需要手动拷贝字体文件的库,link 基本就废了一半。先确认下你是不是用的 React Native 0.60+,如果是的话,必须手动配置字体文件,特别是 Android。
Android 的话,先在
android/app/src/main/assets/fonts/目录下创建一个空文件夹(如果不存在的话),然后把node_modules/react-native-vector-icons/Fonts下的所有字体文件复制进去,注意是全部复制,别漏。然后在
android/app/build.gradle的android节点里加一句:iOS 的话,打开
ios/YourApp.xcworkspace,拖node_modules/react-native-vector-icons/Fonts里的对应 .ttf 文件进去(记得勾选 “Copy items if needed” 和 “Add to targets”),然后在Info.plist里加Fonts provided by application键,把文件名(带 .ttf 后缀)加进去。最后别忘了 clean 一下构建缓存:
cd android && ./gradlew clean && cd .. && npx react-native run-android或者 iOS 用 Xcode clean build folder 再重跑。
如果还是不显示,大概率是字体名写错了,比如
FontAwesome里有些图标其实是fa-rocket,你得查下官方的 icon 名字是不是真的叫rocket,我之前就踩过这个坑,名字对不上,方框是常态。