所以,我有一个expo React Native应用程序,我已经在xcode中打开它,并且我在模拟器中运行它,除了字体未加载之外没有任何问题。我的字体存储在我的 React Native 根文件夹中的 asset/fonts 中,并且在生成的 ios 文件夹中,它们位于 asset/assets/fonts 中。因此,当它在模拟器中时,字体被放置在 .app 中,因此在根文件夹中,导致它们无法加载,因为我的代码期望它们位于 .app/assets/assets/fonts 中,我将如何修复所有帮助? .
应用程序.json
{
"expo": {
"assetBundlePatterns": [
"**/*"
],
"fonts":{
"GothamRoundedMedium":"./assets/fonts/gothamrnd_medium.otf",
"GothamRoundedBold":"./assets/fonts/gothamrnd_bold.otf",
"GothamRoundedLight":"./assets/fonts/gothamrnd_light.otf",
"GothamRoundedBook":"./assets/fonts/gothamrnd_book.otf",
"GothamNarrowMedium":"./assets/fonts/gotham_narrow/GothamNarrow-Medium.otf",
"GothamNarrowXMedium":"./assets/fonts/gotham_narrow/GothamXNarrow-Medium.otf"
},
"name": "main",
"displayName": "appname",
"entryPoint": "./index.tsx",
"slug": "appname",
"version": "1.0.0",
"orientation": "portrait",
"icon": "./assets/icon.png",
"userInterfaceStyle": "light",
"splash": {
"image": "./assets/splash.png",
"resizeMode": "contain",
"backgroundColor": "#ffffff"
},
"ios": {
"supportsTablet": true,
"bundleIdentifier": "com.anon.hsl",
"buildNumber": "1.0.0"
},
"android": {
"adaptiveIcon": {
"foregroundImage": "./assets/adaptive-icon.png",
"backgroundColor": "#ffffff"
},
"package": "com.anonymous.hsl"
},
"web": {
"favicon": "./assets/favicon.png"
}
}
}
Metro 配置文件
// Learn more https://docs.expo.io/guides/customizing-metro
const { getDefaultConfig: getDefaultExpoConfig } = require('expo/metro-config');
const { mergeConfig, getDefaultConfig } = require('@react-native/metro-config');
/** @type {import('expo/metro-config').MetroConfig} */
const expoConfig = getDefaultExpoConfig(__dirname);
const defaultConfig = getDefaultConfig(__dirname);
const { assetExts, sourceExts } = expoConfig.resolver;
const config = {
transformer: {
...expoConfig.transformer,
babelTransformerPath: require.resolve("react-native-svg-transformer/expo")
},
resolver: {
...expoConfig.resolver,
assetExts: assetExts.filter((ext) => ext !== "svg"),
sourceExts: [...sourceExts, "svg"]
}
};
module.exports = mergeConfig(defaultConfig, expoConfig, config);
我如何加载字体
const load_fonts = async() => {
await Font.loadAsync({
'GothamRoundedMedium': require('./assets/fonts/gothamrnd_medium.otf'),
'GothamRoundedBold': require('./assets/fonts/gothamrnd_bold.otf'),
'GothamRoundedLight': require('./assets/fonts/gothamrnd_light.otf'),
'GothamRoundedBook': require('./assets/fonts/gothamrnd_book.otf'),
'GothamNarrowMedium': require('./assets/fonts/gotham_narrow/GothamNarrow-Medium.otf'),
'GothamNarrowXMedium': require('./assets/fonts/gotham_narrow/GothamXNarrow-Medium.otf'),
});
};
我尝试以加载字体的方式更改字体的路径,以匹配模拟器中的字体,但我不能,因为它与我的反应本机文件夹结构不匹配
这似乎只是 Xcode 模拟器中的一个问题,当我进行 .ipa 构建时,一切似乎都工作正常