2017-08-22 13 views
1

主なコンポーネントビューは、多くのビューを持つScrollViewとフラットリストをレンダリングするコンポーネントです。 私は画面を下にスクロールして、最後に達したら、フラットリストはどこにあるのですか?フラットリストをスクロールし始めます。どうすればこれを達成できますか?FlatListでネイティブScrollViewに反応する

<ScrollView> 
     <View style={{flex:1}}> 
      <Image> 
       <View> 
        <Text></Text> 
        <Text></Text> 
       </View> 
      </Image> 
      <EventInfo/> 
      <Text> </Text> 
      <Text> </Text> 
      <EventHeader/> 
     </View> 
     <EventGuests/> 
</ScrollView> 

EventGuestsがflatlistをレンダリングするコンポーネントです:

私はこのような何かを持っています。 この方法ではリスト全体が表示され、すべての画面がスクロールされます。

答えて

1

お客様のScrollViewコンポーネントにonScroll小道具を使用してみてください。スクロールした画面の終わりを検出するために使用することができます。

const isReachedEnd = ({layoutMeasurement, contentOffset, contentSize}) => { 
    const paddingToBottom = 10; 

    return layoutMeasurement.height + contentOffset.y >= contentSize.height - paddingToBottom; 
}; 

const renderEventGuests =() => { 
    return (
    <EventGuests /> 
); 
}; 

render() { 
    return (
    <ScrollView 
     onScroll={({nativeEvent}) => { 
     if (this.isReachedEnd(nativeEvent)) { 
      this.renderEventGuests(); 
     } 
     }} 
     scrollEventThrottle={400} 
    > 
     <View style={{ flex:1 }}> 
     <Image> 
      <View> 
      <Text></Text> 
      <Text></Text> 
      </View> 
     </Image> 

     <EventInfo /> 

     <Text></Text> 
     <Text></Text> 

     <EventHeader /> 
     </View> 
    </ScrollView> 
) 
} 

参考:Detect ScrollView has reached the end

+0

動作しませんでした。しかし、すでにそれを解決しました。イメージはすべてを破壊していました。理由は分かりません – thomas12

2

これを行うための最善のアプローチは、FlatListのListHeaderComponentの小道具を使用することです。

You can check it here.

だけFlatListヘッダ小道具にFlatListよりも高く、あなたのすべてのコンポーネントを渡します。 これは、ScrollViewとFlatListスクロールの間に矛盾がないようにする正しい方法です。

+0

'HeaderComponent'は予測できない高さを持つので、スクロールメソッドを呼び出すと問題が発生します。したがって、 'getItemLayout'は正確ではありません。 – Tuna

関連する問題