React Native Touchable отключает ScrollView

Я новичок в 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>

Когда это компилируется и выполняется, обнаружение нажатия, но прокрутка не прокручивается вообще. Я сделал приведенный выше код коротким и простым, но у каждого компонента есть правильный стиль, и я вижу, что все отлично обрабатывается, а длинный текст обрезается в нижней части ScrollView. Пожалуйста, помогите.

Спасибо!

Ответ 1

У вас может быть scrollView или FlatList внутри TouchableWithoutFeedback. Ты не должен, но несколько раз у тебя нет другого выбора. Взглянув на эти вопросы и ответ подтверждая это. закрыть встроенный модальный щелчок по наложению, как отклонить модальный, нажав экран в ответном режиме.

Для вопроса, единственный способ заставить его работать (по крайней мере, я знаю), или самый простой способ добавить 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>

Примечание. TouchableOpacity - это оболочка для того, чтобы заставить Views реагировать должным образом, так что вы можете легко стилизовать его так, как если бы вы ввели свой компонент View Component, а затем установите некоторые из его специальных реквизитов для того, что вы хотите, например, activeOpacity и т.д. Moreso вы можете использовать TouchableHighlight работает, но получает один дочерний элемент, то есть вы вставляете весь свой компонент внутри родительского.

Ответ 2

I'm using this structure it working for me:

<TouchableWithoutFeedback onPress={() => {}}>
    {other content}   
    <View onStartShouldSetResponder={() => true}>
        <ScrollView>
            {scrollable content}
        </ScrollView>
    </View>
</TouchableWithoutFeedback>

Ответ 3

Thats write, вы не можете иметь вид прокрутки внутри TouchableWithoutFeedback, это свойство реагировать на native, что оно отключит его, вместо этого вы можете просмотреть свой прокрутки вне вкладки TouchableWithoutFeedback и добавить другое содержимое, которое вы хотите щелкнуть внутри тега представления.

Вы также можете использовать Touchable Highlights, если TouchableWithoutFeedback не работает.

Ответ 4

Я думаю, что использование scrollview не очень хорошо в вашем коде. Вы можете обернуть scrollview внутри представления как

<View>
  <ScrollView>
      <TouchableX>
        <View>
           <Text></Text>
        </View>
      </TouchableX>

  </ScrollView>
</View>