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>无法滚动。
组件代码如下:

排查

  1. 测试机是基于Android 7的EMUI 5.0,因此先排查定制系统的BUG。
    1. 结果:模拟器发生同样问题。
  1. 测试是否是网页问题,给WebView直接传入raw html
    1. 结果:问题仍然存在
  1. 测试是否是<ScrollView>问题,将<ScrollView>替换为<View>,另测试不以块级元素包裹的情况
    1. 结果:问题仍然存在
  1. 测试不在Stack路由上是否会发生问题。
    1. 结果:主页、及Drawer路由下页面没有问题,若将Stack路由包裹在Drawer路由中则问题复现。

解决方案

在测试中偶然发现,WebView滑动时实际上会穿过该页面,对此Stack的父级页面进行滑动。
对照了官方demo,对<ScrollView>设置backgroundColor后问题解决。
在Web开发里就算不设置background-color,对元素的操作也不会穿透到其父级元素下,但React Native在低版本Android上不知为何表现如此。
虽然我是为了继续使用自己所掌握的技术栈才选择React Native而不是Native开发Android App,不过以后遇到这种问题大概得先抛弃既有思维才好判断、解决问题……
不要说什么读源码,没学过Native读源码也读不出个所以然吧哼

© 2021-2024 - Diru’s Daydream -

Powered by NotionNext / Theme by NotionKylin