React Native - TouchableOpacity无法在绝对定位的视图中工作

时间:2016-08-31 13:03:16

标签: android react-native

我有一个绝对定位的View,它拥有3个TouchableOpacity组件而3个没有响应它们根本就不起作用,这里出了什么问题请帮助我:)

代码

<View style={[styles.highNormalLowDocListHeaderStateContainer, {width: this.windowWidth, height: this.headerSmallHeight, position: 'absolute', left: 0, top: floatedHeaderTitleTop, elevation: 2}]}>
    <TouchableOpacity onPress={() => this.getDocuments('high')} style={[styles.highNormalLowDocListHeaderStateTextContainer, highSelected.borderStyle]}>
        <Text style={[styles.highNormalLowDocListHeaderStateText, highSelected.textStyle]}>HIGH</Text>
    </TouchableOpacity>
    <TouchableOpacity onPress={() => this.getDocuments('normal')} style={[styles.highNormalLowDocListHeaderStateTextContainer, normalSelected.borderStyle]}>
        <Text style={[styles.highNormalLowDocListHeaderStateText, normalSelected.textStyle]}>NORMAL</Text>
    </TouchableOpacity>
    <TouchableOpacity onPress={() => this.getDocuments('low')} style={[styles.highNormalLowDocListHeaderStateTextContainer, lowSelected.borderStyle]}>
        <Text style {[styles.highNormalLowDocListHeaderStateText, lowSelected.textStyle]}>LOW</Text>
    </TouchableOpacity>
</View>

截图

enter image description here

10 个答案:

答案 0 :(得分:17)

从“ react-native-gesture-handler”导入TouchableOpacity对我有用

import { TouchableOpacity} from 'react-native-gesture-handler'

答案 1 :(得分:4)

即使标签栏在视觉上看起来位于列表中的内容之上,列表的触摸事件也可能在标签栏之前接收。将zIndex添加到选项卡栏以允许它首先接收触摸事件。

答案 2 :(得分:2)

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
  },

答案 3 :(得分:2)

查看您的导入。 如果从'react-native-gesture-handler'导入{TouchableOpacity};不起作用。 您需要从“ react-native”导入此

答案 4 :(得分:2)

我通过在每个父级中添加flex:1并为每个父级添加了高度/宽度来解决此问题。还可以尝试使用flex:1将每个TouchableOpacity拉出到单独的视图中,并为子元素(文本)添加绝对位置。我在按钮上放了一个动画,所以可能有些不同。

答案 5 :(得分:1)

遇到同样的问题,我在上面的@RishavKumar答案中使用了将zIndex: 1添加到您的TouchableOpacity的方法,对我有用。

答案 6 :(得分:0)

如果onPress of TouchableOpacity不起作用,在这种情况下,TouchableNativeFeedback将起作用

示例:

{ Platform.OS === 'ios' ?
  <TouchableOpacity onPress={() => this.showPassordText()}>
    <Text style={{ color: 'red' }}>SHOW</Text>  
  </TouchableOpacity>
  :
  <TouchableNativeFeedback onPress={() => this.showPassordText()}>
    <Text style={{ color: 'red' }}>SHOW</Text>
  </TouchableNativeFeedback>
}

答案 7 :(得分:0)

通常在进行绝对定位时,您必须放置zIndex,因为绝对延迟的ui视图有时会在另一个视图后面呈现

答案 8 :(得分:0)

您的绝对元素可能位于相对元素中。如果要单击它,则应删除父相对规则。

答案 9 :(得分:0)

我在Android应用中遇到了同样的问题。绝对元素不会触发任何事件。

使用Nouar建议的“ react-native-gesture-handler”就可以了。但我敢肯定为什么会这样。

我认为主要区别在于该库实现了本机代码,不再依赖JS。