如果位置绝对,则Touchablehighlight不可点击

mis*_*nkt 28 react-native

我有一个Touchablehighlight,我需要定位绝对,但它在我做之后变得无法点击.

什么可能导致这个?如果我没有将位置设置为绝对,它的功能就像它应该的那样.

mis*_*nkt 56

解决方案是改变组件的顺序.

我原来拥有的:

<TouchableHighLight><Text>Click me</Text></TouchableHighlight>
<View> .... </View>
Run Code Online (Sandbox Code Playgroud)

这是修复:

<View>...</View>
<TouchableHighLight><Text>Click me</Text></TouchableHighlight>
Run Code Online (Sandbox Code Playgroud)

  • 如果我是正确的,最后一个元素显示在第一个元素上方.通常,这就是它如何将元素加载到DOM.在这里,由于第一个元素是"绝对",第二个元素在它上面呈现.当我们改变顺序时,`absolute`元素(现在是第二个元素)加载到顶部. (4认同)
  • 如果您不想更改组件的顺序,可以选择更改要在所有组件之上的组件的`zIndex`.在大多数情况下,即使是`zIndex:1`也会这样做...... (3认同)
  • 大!有人可以解释为什么这样做吗? (2认同)

小智 29

解决了:

我今天遇到了这个问题。我已经解决了。

TouchableOpacity从而react-native-gesture-handler不是导入react-native

之前

import {TouchableOpacity} from "react-native";
Run Code Online (Sandbox Code Playgroud)

之后

import {TouchableOpacity} from 'react-native-gesture-handler'
Run Code Online (Sandbox Code Playgroud)

  • 这是最好的答案,我一直在思考这个问题,并意识到我已经从“react-native-gesture-handler”导入了“TouchableOpacity”,并将其更改为从“react-native”导入。是的,情况正好相反,但是它激发了火花并起作用了:p (3认同)
  • 有趣的是,对我来说,解决方案是相反的,我从react-native-gesture-handler切换回react-native的TouchableHighlight。 (2认同)

Ris*_*mar 18

Dude只是将zIndex:1添加到包含按钮的视图中,并且在大多数情况下都可以完成.另请注意添加高程会为android按钮添加阴影,如果将其添加到父级并且未添加到子级,则有时高程也可能是一个问题,那么子按钮可能无效.(罕见情况)

例如:

buttonContainers:
  {
    zIndex: 1,
    alignSelf: 'flex-end',
    position: 'absolute',
    top:5,
    right: 5,
    height: 40,
    borderWidth: 1,
    justifyContent: 'center',
    alignContent: 'center',
    width: 80
  },
Run Code Online (Sandbox Code Playgroud)

  • 这是在RN中引入zIndex之前所做的非常古老的文章。 (2认同)
  • 对不起兄弟,我刚刚做了一个评论,如果有任何新的反应原生面临同样的问题,并且不知道zIndex那么它可以帮助他们很多.:) (2认同)
  • 这刚刚解决了我的“react-native-vector-icons”问题。`zIndex: 1` 是一个关键的奖励属性。否则,在 `&lt;TouchableOpacity /&gt;` 中包含一个 `&lt;Icon /&gt;` 组件会导致一个问题,即图标不充当点击空间,但图标周围的区域却充当点击空间,因此它使按钮 100% 垃圾酱。 (2认同)
  • 编辑1:有时zIndex不仅够用,还必须在Android中父视图上方的子视图中添加高程才能使其起作用: (2认同)
  • 这不起作用,我在反应导航的标题中有一些可触摸的内容。并且 zIndex 没有帮助。 (2认同)

小智 13

使用 onPressIn 而不是 onPress

这使得该区域可点击!


李华良*_*李华良 6

TouchableOpacity里面用的是绝对视图。onPress按下后没有调用该函数。但不透明度改变了。我已经尝试了上述所有解决方案,但都没有奏效。

我的解决方案是使用onPressIn而不是onPress.

Touchable*当它在绝对视图中时,ReactNative 中的内部动作似乎很奇怪。


小智 5

经过两个小时的尝试后,我找到的解决方案是更改按钮位置。

前 ...

  export default class Navbar extends Component {

  componentDidMount() {
    console.log(this.props);
  }

  render() {
    return (
      <View style={styles.content}>
        <TouchableOpacity
          onPress={this.props.openModal}
          style={styles.containerButton}
        >
          <Text>New</Text>
        </TouchableOpacity>
        <Text style={styles.textCenter}>Remember me</Text>
      </View>
    );
  }
}

const styles = StyleSheet.create({
  content: {
    paddingTop: 30,
    paddingBottom: 10,
    backgroundColor: '#81C04D',
    flexDirection: 'row'
  },
  containerButton: {
    position: 'absolute',
    top: 30,
    left: 8
  },
  textCenter: {
    flex: 1,
    textAlign: 'center',
    fontWeight: 'bold'
  }
});
Run Code Online (Sandbox Code Playgroud)

后 ...

export default class Navbar extends Component {

  componentDidMount() {
    console.log(this.props);
  }

  render() {
    return (
      <View style={styles.content}>
        <Text style={styles.textCenter}>Remember me</Text>
        <TouchableOpacity
          onPress={this.props.openModal}
          style={styles.containerButton}
        >
          <Text>New</Text>
        </TouchableOpacity>
      </View>
    );
  }
}

const styles = StyleSheet.create({
  content: {
    paddingTop: 30,
    paddingBottom: 10,
    backgroundColor: '#81C04D',
    flexDirection: 'row'
  },
  containerButton: {
    position: 'absolute',
    top: 30,
    left: 8
  },
  textCenter: {
    flex: 1,
    textAlign: 'center',
    fontWeight: 'bold'
  }
});
Run Code Online (Sandbox Code Playgroud)

有用!!!