React Native Expo项目中fontWeight属性不生效问题求助
问题原因
你当前的字体加载方式是将每个字重的字体文件注册为独立的字体家族名称(如RedHatDisplay-ExtraBold),而非将它们归到同一个字体家族下并关联对应字重。这种情况下:
- 每个注册的字体名称仅对应固定字重的文件,
fontWeight属性会被忽略,因为系统无法从独立的字体家族中匹配不同字重。 - 当你同时指定特定字重的
fontFamily和fontWeight(比如fontFamily: 'RedHatDisplay-ExtraBold'+fontWeight: '100'),系统会因找不到匹配的字体配置, fallback 到默认的400字重显示。
解决方案
1. 修改字体加载代码,将所有字重归到同一字体家族下
更新useFonts函数,将不同字重的文件映射到同一个字体家族名称(如RedHatDisplay),并通过对应字段关联字重:
import * as Font from 'expo-font'; const useFonts = async () => await Font.loadAsync({ 'RedHatDisplay': { // 对应 fontWeight: '300' light: require('../../assets/font/Red_Hat_Display/static/RedHatDisplay-Light.ttf'), // 对应 fontWeight: '400' normal: require('../../assets/font/Red_Hat_Display/static/RedHatDisplay-Regular.ttf'), // 对应 fontWeight: '500' medium: require('../../assets/font/Red_Hat_Display/static/RedHatDisplay-Medium.ttf'), // 对应 fontWeight: '600' semiBold: require('../../assets/font/Red_Hat_Display/static/RedHatDisplay-SemiBold.ttf'), // 对应 fontWeight: '700' bold: require('../../assets/font/Red_Hat_Display/static/RedHatDisplay-Bold.ttf'), // 对应 fontWeight: '800' extraBold: require('../../assets/font/Red_Hat_Display/static/RedHatDisplay-ExtraBold.ttf'), // 对应 fontWeight: '900' black: require('../../assets/font/Red_Hat_Display/static/RedHatDisplay-Black.ttf'), }, }); export default useFonts;
2. 使用字体时,统一指定字体家族并通过fontWeight选择字重
不再单独指定带字重的字体名称,而是用fontFamily: 'RedHatDisplay',然后通过fontWeight数值或关键字匹配对应字重:
<Text style={{ fontFamily: 'RedHatDisplay', fontSize: 22, // 用数值或关键字都可以,比如'800'或'extraBold' fontWeight: '800', letterSpacing: 0.03, color: '#020215' }}>示例文本</Text>
3. 验证字体文件对应关系
确保每个字段对应的字体文件确实是对应字重的版本,比如extraBold字段指向的RedHatDisplay-ExtraBold.ttf确实是800字重的文件,避免因文件错误导致显示异常。
内容的提问来源于stack exchange,提问作者spjgoku
相关产品推荐
相关产品推荐

