You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级Expo SDK 50后React Native iOS应用图片无法显示求助

React Native SDK50 + Metro:iOS图片无法显示排查方案

一、本地图片(assets)问题排查

  • 检查Metro配置的资源扩展名
    Metro默认未包含所有图片格式,需在metro.config.js中确保resolver.sourceExts添加了你用到的格式:
    const { getDefaultConfig, mergeConfig } = require('@react-native/metro-config');
    
    const config = {};
    
    module.exports = mergeConfig(getDefaultConfig(__dirname), {
      resolver: {
        sourceExts: [...getDefaultConfig(__dirname).resolver.sourceExts, 'png', 'jpg', 'jpeg', 'svg'],
      },
    });
    
  • 校验本地图片导入路径
    升级后路径解析规则变化,避免多层嵌套的相对路径简写,优先使用根路径别名(若配置)或完整正确路径。例如:
    不推荐:import img from '../../assets/icon.png'
    推荐(配别名后):import img from '@assets/icon.png'
  • 彻底清理缓存重建
    执行以下命令清除Metro和iOS缓存后重新构建:
    npx react-native start --reset-cache
    cd ios && pod deintegrate && pod install && cd ..
    npx react-native run-ios
    

二、网络图片问题排查

  • 检查iOS网络权限配置
    若使用HTTP图片链接,需在Info.plist中添加访问权限;HTTPS链接需确认证书有效性:
    <key>NSAppTransportSecurity</key>
    <dict>
      <key>NSAllowsArbitraryLoads</key>
      <true/>
    </dict>
    
    注:上线时建议针对特定域名配置NSExceptionDomains,不要全局开启NSAllowsArbitraryLoads。
  • 规范Image组件使用
    网络图片必须以{ uri: '图片链接' }格式传入source属性,示例:
    正确写法:<Image source={{ uri: 'https://example.com/image.jpg' }} style={{ width: 100, height: 100 }} />
    错误写法:<Image source="https://example.com/image.jpg" />

三、Web与iOS差异的核心原因

Web依赖Webpack的资源打包映射逻辑,而Metro遵循React Native原生资源查找规则;同时iOS沙盒机制对资源访问权限、路径解析的限制比Web更严格,这是两者表现不同的根本原因。

内容的提问来源于stack exchange,提问作者NicoleZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 01:15:12