简体   繁体   English

React Native Android WebView的PanResponder无法正常工作

[英]React Native Android WebView's PanResponder not working

I have a webview inside one of the screens of tab navigator. 我在标签导航器的屏幕之一内有一个webview。 There are elements inside the webview which the user could swipe horizontally to show more information. Web视图中有一些元素,用户可以水平滑动以显示更多信息。 The problem I have is that whenever the user tries to swipe horizontally inside the webview, the tab navigator detects the swipe instead and this results in the tab changing. 我的问题是,每当用户尝试在Web视图内水平滑动时,选项卡导航器就会改为检测到滑动,这会导致选项卡更改。 This only happens on Android devices but not iOS devices. 这仅在Android设备上发生,而在iOS设备上不发生。

To solve this issue, I am trying to set PanResponder inside the webview but it's not working. 为了解决此问题,我试图在Webview内设置PanResponder,但是它不起作用。 The related methods are not even called because the console logs are not printed when I am dragging my finger across the webview. 甚至没有调用相关方法,因为当我在Webview上拖动手指时未打印控制台日志。 Below is my code for the webview: 以下是我的网络视图代码:

import React, { Component } from 'react';
import { WebView, View, PanResponder} from 'react-native';

class CustomWebPage extends Component {
  componentWillMount() {
    this.gesture = PanResponder.create({
      onPanResponderTerminationRequest: () => false,
      onStartShouldSetPanResponder: (evt, gestureState) => true,
      onStartShouldSetPanResponderCapture: (evt, gestureState) => true,
      onMoveShouldSetPanResponder: (evt, gestureState) => true,
      onMoveShouldSetPanResponderCapture: (evt, gestureState) => true,
      onPanResponderGrant: (evt, gestureState) => {
        console.log('onPanResponderGrant');
      },
      onPanResponderMove: (evt, gestureState) => {
        console.log('onPanResponderMove: ', evt, ', ', gestureState);
      },
     onPanResponderTerminate: (evt, gestureState) => {
        console.log('onPanResponderTerminate: ', evt, ', ', gestureState);
      },
      onPanResponderRelease: (evt, gestureState) => {
        console.log('onPanResponderRelease: ', evt, ', ', gestureState);
      },
    });
  }

  render() {
    return (
        <WebView
          source={{ uri: 'https://www.google.com.sg/' }}
          style={{ flex: 1 }}
          {...this.gesture.panHandlers}
        />
    );
  }
}

export default CustomWebPage;

Replace componentWillMount() with constructor() 用Constructor()替换componentWillMount()

so here, 所以在这里,

constructor(props) {
    super(props) {
// Here your PanResponder related codes

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM