ScrollView, FlatList, SectionList with collapsible headers + HOC for wrapping custom scrollables
$ npm install react-native-collapsible-header-views --save
| Android | iOS | 
|---|---|
|  |  | 
import * as React from 'react';
import { View, Platform } from 'react-native';
import { CollapsibleHeaderScrollView } from 'react-native-collapsible-header-views';
export const Basic = () => (
  <CollapsibleHeaderScrollView
    CollapsibleHeaderComponent={<View style={{ backgroundColor: 'white' }} />}
    headerHeight={100}
    statusBarHeight={Platform.OS === 'ios' ? 20 : 0}
  >
    <View style={{ height: 2000, backgroundColor: 'wheat' }} />
  </CollapsibleHeaderScrollView>
);Library exports three components CollapsibleHeaderScrollView, CollapsibleHeaderFlatList,
CollapsibleHeaderSectionList and a HOC withCollapsibleHeader for wrapping custom scrollable
components. Provided components support all props and instance methods of corresponding wrapped
components. Note that components are also wrapped with Animated.createAnimatedComponent under the
hood.
- CollapsibleHeaderComponent: React.ReactElement<unknown> | React.ComponentType<CollapsibleHeaderProps>- React element or component/function that receives- CollapsibleHeaderPropsobject. Required;
- headerHeight: number- height of- CollapsibleHeaderComponent. Required;
- statusBarHeight?: number- height of status bar. Defaults to- 0;
- headerContainerBackgroundColor?: string- background color for- CollapsibleHeaderComponentand status bar container. Defaults to- 'white';
- disableHeaderSnap?: boolean- pass- trueto disable header snap animations. Defaults to- false;
- headerAnimationDuration?: number- duration of snap and- showHeader,- hideHeaderanimations. Defaults to- 350;
- clipHeader?: boolean- if- trueheader will be clipped with- overflow: 'hidden'style.
Also some of ScrollView props have new defaults: bounces defaults to false, overScrollMode
to 'never' and scrollEventThrottle to 1.
- interpolatedHeaderTranslation: (from: number, to: number) => Animated.AnimatedInterpolation- creates new- AnimatedInterpolationobject, whose input range corresponds to header translation and output range is specified by- fromand- toparams. Can be used for custom animations, like setting opacity etc.;
- showHeader: (options: { animated: boolean } | unknown) => void- pushes header down with animation enabled by default;
- hideHeader: (options: { animated: boolean } | unknown) => void- pulls header up with animation enabled by default.
- animatedComponent: () => any | null- returns result of- Animated.createAnimatedComponentapplied to original component;
- showHeader: (options: { animated: boolean } | unknown) => void- pushes header down with animation enabled by default;
- hideHeader: (options: { animated: boolean } | unknown) => void- pulls header up with animation enabled by default.
- function withCollapsibleHeader<T extends ScrollViewProps>(Component: React.ComponentClass<T>): React.ComponentClass<CollapsibleHeaderViewProps<T>>- creates new component with collapsible header, it is assumed that input component has all of- ScrollViewprops.
- Key concepts were taken from collapsible-navbar demo by @janicduplessis