react-native-modals icon indicating copy to clipboard operation
react-native-modals copied to clipboard

ScrollView inside ModalContent

Open tongbao123 opened this issue 6 years ago • 21 comments

i put ScrollView inside ModalContent, it's cannot scrollable.

tongbao123 avatar Sep 16 '19 06:09 tongbao123

@jacklam718 facing same issue,

hussainahmad avatar Oct 02 '19 06:10 hussainahmad

Hi, same issue. Look here

Blizard avatar Oct 08 '19 04:10 Blizard

also not working with FlatList

Stjng avatar Nov 01 '19 03:11 Stjng

scrollToInitialPosition = () => { *******.map((item, key) => { if(item.selected == true) { this.scrollViewRef.scrollTo({ y: key * 31}); } }); }

Remove '*' and add your variable in which you have your data and set index instead of '31'. it is working fine for me. if you have any issue, let me know and share your code where you are facing issue. Moreover, in official document, it's explanation is also provided.

Here is another example. < ScrollView ref={(ref) => { this.scrollListReftop = ref; }}>

< /ScrollView>

// write this to get scroll on top

this.scrollListReftop.scrollTo({x: 0, y: 0, animated: true})

MAsad-Nawaz avatar Dec 20 '19 12:12 MAsad-Nawaz

also not working with FlatList

please share code where have you issue

MAsad-Nawaz avatar Dec 20 '19 12:12 MAsad-Nawaz

I totally agree, scroll view is not working in the modal

Simple Example : https://snack.expo.io/ry!D35T_I

any help someone please ? @jacklam718 @MAsad-Nawaz

pixelize avatar Jan 28 '20 11:01 pixelize

I totally agree, scroll view is not working in the modal

Simple Example : https://snack.expo.io/ry!D35T_I

any help someone please ? @jacklam718 @MAsad-Nawaz

here is the example in which scroll-view is working fine. If you want to know something else let me know. This modal example is perfectly working on iOS and android. `import React, { Component } from 'react'; import { Modal, ScrollView,Text, TouchableHighlight, View, StyleSheet}

from 'react-native' class ModalExample extends Component { state = { modalVisible: false, } toggleModal(visible) { this.setState({ modalVisible: visible }); } render() { return ( <View style = {styles.container}>

        <Modal  transparent = {false}
        animationType = {"slide"}
           visible = {this.state.modalVisible}
           onRequestClose = {() => { this.setState({ modalVisible: false }) }}
           presentationStyle = "formSheet"
           >
           
           <View style = {styles.modal}>
              <Text style = {styles.text}>Modal is open!</Text>
              <ScrollView>
              <TouchableHighlight onPress = {() => {
                 this.toggleModal(!this.state.modalVisible)}}>
                
                 <Text style = {styles.text}>
                 
                  Lorem ipsum dolor sit amet consectetur adipisicing elit. Beatae
          praesentium non minima exercitationem sequi nostrum, accusamus
          commodi vero laborum laudantium odit, alias perspiciatis id eius
          culpa architecto quo ratione nesciunt? Lorem ipsum dolor sit amet
          consectetur adipisicing elit. Beatae praesentium non minima
          exercitationem sequi nostrum, accusamus commodi vero laborum
          laudantium odit, alias perspiciatis id eius culpa architecto quo
          ratione nesciunt? Lorem ipsum dolor sit amet consectetur
          adipisicing elit. Beatae praesentium non minima exercitationem
          sequi nostrum, accusamus commodi vero laborum laudantium odit,
          alias perspiciatis id eius culpa architecto quo ratione nesciunt?
          Lorem ipsum dolor sit amet consectetur adipisicing elit. Beatae
          praesentium non minima exercitationem sequi nostrum, accusamus
          commodi vero laborum laudantium odit, alias perspiciatis id eius
          culpa architecto quo ratione nesciunt? Lorem ipsum dolor sit amet
          consectetur adipisicing elit. Beatae praesentium non minima
          exercitationem sequi nostrum, accusamus commodi vero laborum
          laudantium odit, alias perspiciatis id eius culpa architecto quo
          ratione nesciunt? Lorem ipsum dolor sit amet consectetur
          adipisicing elit. Beatae praesentium non minima exercitationem
          sequi nostrum, accusamus commodi vero laborum laudantium odit,
          alias perspiciatis id eius culpa architecto quo ratione nesciunt?
          Lorem ipsum dolor sit amet consectetur adipisicing elit. Beatae
          praesentium non minima exercitationem sequi nostrum, accusamus
          commodi vero laborum laudantium odit, alias perspiciatis id eius
          culpa architecto quo ratione nesciunt? Lorem ipsum dolor sit amet
          consectetur adipisicing elit. Beatae praesentium non minima
          exercitationem sequi nostrum, accusamus commodi vero laborum
          laudantium odit, alias perspiciatis id eius culpa architecto quo
          ratione nesciunt? Lorem ipsum dolor sit amet consectetur
          adipisicing elit. Beatae praesentium non minima exercitationem
          sequi nostrum, accusamus commodi vero laborum laudantium odit,
          alias perspiciatis id eius culpa architecto quo ratione nesciunt?
          Lorem ipsum dolor sit amet consectetur adipisicing elit. Beatae
          praesentium non minima exercitationem sequi nostrum, accusamus
          commodi vero laborum laudantium odit, alias perspiciatis id eius
          culpa architecto quo ratione nesciunt?
                 
                 
                 </Text>
                 
              </TouchableHighlight>
              </ScrollView>
           </View>
           
        </Modal>
        
        <TouchableHighlight onPress = {() => {this.toggleModal(true)}}>
           <Text style = {styles.text}>Open Modal</Text>
        </TouchableHighlight>
     </View>
  )

} } export default ModalExample

const styles = StyleSheet.create ({ container: { alignItems: 'center', backgroundColor: 'green', padding: 20 }, modal: { flex: 1, alignItems: 'center', backgroundColor: 'black', height:100, padding: 100 }, text: { color: 'white', marginTop: 10 } })`

MAsad-Nawaz avatar Jan 29 '20 09:01 MAsad-Nawaz

I totally agree, scroll view is not working in the modal

Simple Example : https://snack.expo.io/ry!D35T_I

any help someone please ? @jacklam718 @MAsad-Nawaz

here is the link https://snack.expo.io/BkEWBRCbL

MAsad-Nawaz avatar Jan 29 '20 10:01 MAsad-Nawaz

@MAsad-Nawaz thanks for the hint, i'm moving to the community package https://github.com/react-native-community/react-native-modal which seems more reliable :)

pixelize avatar Jan 29 '20 11:01 pixelize

@MAsad-Nawaz thanks for the hint, i'm moving to the community package https://github.com/react-native-community/react-native-modal which seems more reliable :)

Welcome :) if you need any help, let me know

MAsad-Nawaz avatar Jan 30 '20 04:01 MAsad-Nawaz

I am experiencing the same issue, iOS only though. The ScrollView is almost not possible to be scrolled - only sometimes it "catches" the scroll events and in a limited manner.

@jacklam718 any input on this? Thanks!

Doychev avatar Mar 06 '20 14:03 Doychev

For those still looking for a solution, I created a library dedicated to this behaviour of swiping/scrolling all together: https://github.com/jeremybarbet/react-native-modalize

jeremybarbet avatar May 05 '20 10:05 jeremybarbet

Any updates on this?

I totally agree, scroll view is not working in the modal Simple Example : https://snack.expo.io/ry!D35T_I any help someone please ? @jacklam718 @MAsad-Nawaz

here is the example in which scroll-view is working fine. If you want to know something else let me know. This modal example is perfectly working on iOS and android. `import React, { Component } from 'react'; import { Modal, ScrollView,Text, TouchableHighlight, View, StyleSheet}

from 'react-native' class ModalExample extends Component { state = { modalVisible: false, } toggleModal(visible) { this.setState({ modalVisible: visible }); } render() { return (

        <Modal  transparent = {false}
        animationType = {"slide"}
           visible = {this.state.modalVisible}
           onRequestClose = {() => { this.setState({ modalVisible: false }) }}
           presentationStyle = "formSheet"
           >
           
           <View style = {styles.modal}>
              <Text style = {styles.text}>Modal is open!</Text>
              <ScrollView>
              <TouchableHighlight onPress = {() => {
                 this.toggleModal(!this.state.modalVisible)}}>
                
                 <Text style = {styles.text}>
                 
                  Lorem ipsum dolor sit amet consectetur adipisicing elit. Beatae
          praesentium non minima exercitationem sequi nostrum, accusamus
          commodi vero laborum laudantium odit, alias perspiciatis id eius
          culpa architecto quo ratione nesciunt? Lorem ipsum dolor sit amet
          consectetur adipisicing elit. Beatae praesentium non minima
          exercitationem sequi nostrum, accusamus commodi vero laborum
          laudantium odit, alias perspiciatis id eius culpa architecto quo
          ratione nesciunt? Lorem ipsum dolor sit amet consectetur
          adipisicing elit. Beatae praesentium non minima exercitationem
          sequi nostrum, accusamus commodi vero laborum laudantium odit,
          alias perspiciatis id eius culpa architecto quo ratione nesciunt?
          Lorem ipsum dolor sit amet consectetur adipisicing elit. Beatae
          praesentium non minima exercitationem sequi nostrum, accusamus
          commodi vero laborum laudantium odit, alias perspiciatis id eius
          culpa architecto quo ratione nesciunt? Lorem ipsum dolor sit amet
          consectetur adipisicing elit. Beatae praesentium non minima
          exercitationem sequi nostrum, accusamus commodi vero laborum
          laudantium odit, alias perspiciatis id eius culpa architecto quo
          ratione nesciunt? Lorem ipsum dolor sit amet consectetur
          adipisicing elit. Beatae praesentium non minima exercitationem
          sequi nostrum, accusamus commodi vero laborum laudantium odit,
          alias perspiciatis id eius culpa architecto quo ratione nesciunt?
          Lorem ipsum dolor sit amet consectetur adipisicing elit. Beatae
          praesentium non minima exercitationem sequi nostrum, accusamus
          commodi vero laborum laudantium odit, alias perspiciatis id eius
          culpa architecto quo ratione nesciunt? Lorem ipsum dolor sit amet
          consectetur adipisicing elit. Beatae praesentium non minima
          exercitationem sequi nostrum, accusamus commodi vero laborum
          laudantium odit, alias perspiciatis id eius culpa architecto quo
          ratione nesciunt? Lorem ipsum dolor sit amet consectetur
          adipisicing elit. Beatae praesentium non minima exercitationem
          sequi nostrum, accusamus commodi vero laborum laudantium odit,
          alias perspiciatis id eius culpa architecto quo ratione nesciunt?
          Lorem ipsum dolor sit amet consectetur adipisicing elit. Beatae
          praesentium non minima exercitationem sequi nostrum, accusamus
          commodi vero laborum laudantium odit, alias perspiciatis id eius
          culpa architecto quo ratione nesciunt?
                 
                 
                 </Text>
                 
              </TouchableHighlight>
              </ScrollView>
           </View>
           
        </Modal>
        
        <TouchableHighlight onPress = {() => {this.toggleModal(true)}}>
           <Text style = {styles.text}>Open Modal</Text>
        </TouchableHighlight>
     </View>
  )

} } export default ModalExample

const styles = StyleSheet.create ({ container: { alignItems: 'center', backgroundColor: 'green', padding: 20 }, modal: { flex: 1, alignItems: 'center', backgroundColor: 'black', height:100, padding: 100 }, text: { color: 'white', marginTop: 10 } })`

But this is actually not using this package - instead a normal modal right? ...

I came across a workaround (albeit intended for a different package), but it seems to solve for me: Wrap your content with TouchableOpacity.

Ref: https://stackoverflow.com/a/57960538

rchavik avatar Mar 12 '21 11:03 rchavik

I came across a workaround (albeit intended for a different package), but it seems to solve for me: Wrap your content with TouchableOpacity.

Ref: https://stackoverflow.com/a/57960538

But can you then use controls like buttons inside it as well?

I was able to fix this based on @rchavik's tip:

<ModalContent
style={{
  flex: 1,
  backgroundColor: COLORS.WHITE,
}}>
<ScrollView style={{flex: 1}}>
  <View style={{flex: 1}} onStartShouldSetResponder={() => true}>
    {product.simpleProducts.map((simple) => (
      <TouchableOpacity
        disabled={!simple.in_stock}
        style={[styles.selectorRow]}
        onPress={async () => {
          await selectProductAttribute(
            `${simple.attributes[0].id}:${simple.attributes[0].value_id}`,
          );
          setVisible(false);
        }}>
        <Text>
          {simple.attributes[0].value}
        </Text>
      </TouchableOpacity>
    ))}
  </View>
</ScrollView>
...

RustyDev avatar Mar 12 '21 18:03 RustyDev

I came across a workaround (albeit intended for a different package), but it seems to solve for me: Wrap your content with TouchableOpacity.

Ref: https://stackoverflow.com/a/57960538

Note: This workaround is not working properly on real device.

rchavik avatar Mar 15 '21 04:03 rchavik

Hey everyone I found a fix based on the maintainers response above. Just wrap your content directly inside the ScrollView with TouchableOpacity:

<ScrollView>
  <TouchableOpacity activeOpacity={.99}>
    {...modalchildren}
  </TouchableOpacity>
</ScrollView>

jeremypagley avatar Jul 09 '21 19:07 jeremypagley

Hi, modify like this. It's my work around. But, I don't sure it's a good solution.
https://github.com/307499815/react-native-modals/commit/0f3596c7fa37ad2363ac34a6e31b442b83a6007f

image

307499815 avatar Jul 27 '21 15:07 307499815

Is there any progress regarding this problem?

ahmetkuslular avatar Sep 16 '23 21:09 ahmetkuslular