React Native Touchable正在禁用ScrollView

Won*_*Suh 28 scrollview react-native

我是React Native的新手,所以我可能会问一些非常明显的事情,但请帮忙.

我有一个可触摸的视图,所以整个区域响应攻丝.然后将ScrollView嵌套在视图中.整体结构是这样的:

<TouchableWithoutFeedback onPress={this.handlePress.bind(this)}>
    <View>
        <ScrollView>
            <Text>Hello, here is a very long text that needs scrolling.</Text>
        <ScrollView>
    </View>
</TouchableWithoutFeedback>
Run Code Online (Sandbox Code Playgroud)

编译并运行时,会检测到点击,但滚动视图根本不会滚动.我使上面的代码简洁明了,但每个组件都有正确的样式,我可以看到所有渲染都很好,长文本在ScrollView的底部被截断.请帮忙.

谢谢!

小智 30

I'm using this structure it's working for me:

<TouchableWithoutFeedback onPress={() => {}}>
    {other content}   
    <View onStartShouldSetResponder={() => true}>
        <ScrollView>
            {scrollable content}
        </ScrollView>
    </View>
</TouchableWithoutFeedback>
Run Code Online (Sandbox Code Playgroud)

  • @SilambarasanRaman 我很想让这个版本正常工作。它在 iOS 上适用吗?看看[这个世博小吃](https://snack.expo.io/@gollyjer/touchable-wrapped-scrollview)。它只适用于 Android,不适用于 iOS。‍♂️ (2认同)

小智 17

这对我有用:

<TouchableWithoutFeedback onPress={...}>
  <View>
    <ScrollView>
      <View onStartShouldSetResponder={() => true}>
        // Scrollable content
      </View>
    </ScrollView>
  </View>
</TouchableWithoutFeedback>
Run Code Online (Sandbox Code Playgroud)

所述onStartShouldSetResponder支柱停止朝向所述触摸事件传播TouchableWithoutFeedback元件.

  • 在`true`之后删除`;`。除此之外,此解决方案对我有用。elf2707没有-必须在ScrollView的子级中添加onStartShouldSetResponder (2认同)

小智 8

您可以在 TouchableWithoutFeedback 中使用 scrollView 或 FlatList。你不应该,但有时你别无选择。仔细看看这些问题和答案可以验证这一点。 通过单击覆盖关闭本机模态如何通过在本机反应中点击屏幕来关闭模态

对于这个问题,你可以让它工作的唯一方法(至少我知道),或者最简单的方法是在你的代码中像这样在 Text 周围添加一个 TouchableOpacity,

 <TouchableWithoutFeedback onPress={this.handlePress.bind(this)}>
    <View>
        <ScrollView>
          <TouchableOpacity>
            <Text>Hello, here is a very long text that needs scrolling.</Text>
          </TouchableOpacity>
        <ScrollView>
    </View>
</TouchableWithoutFeedback>
Run Code Online (Sandbox Code Playgroud)

注意:TouchableOpacity 是一个包装器,用于使视图正确响应触摸,因此您可以按照您设置视图组件样式的方式对其进行样式设置,然后将其一些特殊道具设置为您想要的任何内容,例如 activeOpacity 等。此外,您可以使用 TouchableHighlight 它工作,但它接收一个子元素,即您将所有组件都包含在一个父元素中。


小智 6

我正在使用这个结构,它对我有用:

<TouchableOpacity>
{other content}  
<ScrollView> 
     <TouchableOpacity activeOpacity={1}>
        {scrollable content}
     </TouchableOpacity>
</ScrollView>
Run Code Online (Sandbox Code Playgroud)


Lak*_*ari -3

也就是说,您不能在 TouchableWithoutFeedback 内拥有滚动视图,它是 React Native 的属性,它将禁用它,您可以将滚动视图放在 TouchableWithoutFeedback 选项卡之外,并在视图内单击时添加您想要的其他内容标签。

如果 TouchableWithoutFeedback 不起作用,您也可以使用 Touchable 高亮显示。