type
status
date
slug
summary
tags
category
icon
password
环境
React Native
0.63.0
react-native-webview
10.3.2
react-navigation
5
这个问题仅在Android 7(API 24,更低的API版本未测试)环境下出现,Android 9(API 28)没有出现问题。
现象
以嵌套导航(Drawer+Stack)实现的页面上,在最深层嵌套(主界面Drawer导航,下级嵌套Stack导航)上的
<WebView>
无法滚动。组件代码如下:
排查
- 测试机是基于Android 7的EMUI 5.0,因此先排查定制系统的BUG。
结果:模拟器发生同样问题。
- 测试是否是网页问题,给
WebView
直接传入raw html
结果:问题仍然存在
- 测试是否是
<ScrollView>
问题,将<ScrollView>
替换为<View>
,另测试不以块级元素包裹的情况
结果:问题仍然存在
- 测试不在Stack路由上是否会发生问题。
结果:主页、及Drawer路由下页面没有问题,若将Stack路由包裹在Drawer路由中则问题复现。
解决方案
在测试中偶然发现,WebView滑动时实际上会穿过该页面,对此Stack的父级页面进行滑动。
对照了官方demo,对
<ScrollView>
设置backgroundColor
后问题解决。在Web开发里就算不设置
background-color
,对元素的操作也不会穿透到其父级元素下,但React Native在低版本Android上不知为何表现如此。虽然我是为了继续使用自己所掌握的技术栈才选择React Native而不是Native开发Android App,不过以后遇到这种问题大概得先抛弃既有思维才好判断、解决问题……