React Native升级后Header功能组件中网络图片加载及适配问题求助
React Native升级后Header功能组件中网络图片加载及适配问题求助
我最近把React Native从0.74.5版本升级到0.77.2后,在Header功能组件里加载网络图片遇到了棘手的问题。之前用FastImage的时候图片加载完全正常,但现在要么看不到图片,要么没法按比例正确缩放。实现一个能适配Header的缩放网络图片感觉是个挺基础的需求,但我就是卡在这里了。
先说明下我的项目环境:用了React Navigation、SafeAreaView,还有一些动画逻辑,没有什么特别非常规的配置;虽然是CLI项目,但用到了Expo的组件。
我的具体需求约束如下:
- Header占满屏幕宽度,高度固定为50px,宽度随设备不同而变化
- 图片需要左对齐,通过网络加载(
source={{ uri: clientLogo }}) - 图片原尺寸不固定,加载后必须适配Header的空间,通常是横向的,但宽高比从方正到细长都有可能
- 图片要包裹在可点击组件(比如
<TouchableOpacity>、<Pressable>)里,这个可点击组件要填充所有可用空间,保证用户有足够大的点击区域来返回首页 - 图片必须保持自身的宽高比
- Header右侧还要放置若干可选元素(头像、汉堡菜单、搜索按钮等),需要右对齐
我想要实现的效果类似附件里的示例。
目前的问题是:加了调试边框后能确认尺寸设置是对的,但要么图片位置是空白,要么图片尺寸不对。更奇怪的是,有些修改在热重载后能让图片正常显示,但冷启动或者完全重启App后,又会变回错误状态——要么图片消失,要么尺寸错乱。
我已经尝试过这些方法,但都没彻底解决:
- 替换成原生的
<Image>组件 - 减少Flexbox的使用场景
- 给width属性设置过
undefined、auto、100%等不同初始值 - 将Image/FastImage包裹在一个和图片尺寸一致的View容器中
- 在Image的
onLoad()回调里计算期望的图片尺寸 - 使用静态
Image.getSize()方法,结合useMemo()或者onLoad()来更新图片尺寸和宽高比 - 把
<TouchableOpacity>换成<Pressable>组件 - 等尺寸和宽高比的状态变量计算完成后,再条件渲染图片组件
我甚至怀疑是不是RN的<Image>组件有渲染bug,而不是我理解错了用法——毕竟之前的RN版本里是正常的,搜了已有的issue也没找到相关问题。FastImage看起来已经没人维护了,有不少报错,但换成原生Image也没改善。问AI得到的方案也都出现同样的问题。
有没有大佬能给我一些排查方向或者解决思路?万分感谢!
内容来源于stack exchange
相关产品推荐
相关产品推荐

