Project Name | Stars | Downloads | Repos Using This | Packages Using This | Most Recent Commit | Total Releases | Latest Release | Open Issues | License | Language |
---|---|---|---|---|---|---|---|---|---|---|
React Navigation Collapsible | 1,103 | 6 | 1 | 2 years ago | 71 | November 07, 2021 | 13 | mit | TypeScript | |
An extension of react-navigation that makes your header collapsible. | ||||||||||
React Native Collapsible Tab View | 558 | 1 | a month ago | 78 | June 09, 2022 | 94 | mit | TypeScript | ||
A cross-platform Collapsible Tab View component for React Native | ||||||||||
React Collapsible | 521 | 262 | 84 | 5 months ago | 38 | June 24, 2022 | 23 | mit | JavaScript | |
React component to wrap content in Collapsible element with trigger to open and close. | ||||||||||
React Sanfona | 250 | 55 | 6 | 2 years ago | 43 | January 18, 2020 | 14 | mit | JavaScript | |
Accessible react accordion component | ||||||||||
React Native Collapsible Tabview | 206 | 3 months ago | 15 | mit | JavaScript | |||||
This is only an implementation of tabview with collapsible header. | ||||||||||
React Collapse Pane | 197 | 3 months ago | 23 | May 21, 2022 | 30 | mit | TypeScript | |||
The splittable, draggable, collapsible panel layout library 🎉 | ||||||||||
React Collapse | 143 | 5 | 19 | 4 months ago | 71 | January 17, 2023 | 2 | mit | JavaScript | |
Component-wrapper for collapse animation with CSS for elements with variable and dynamic height | ||||||||||
Json Schema Viewer | 126 | 9 | a day ago | 144 | September 14, 2022 | 19 | apache-2.0 | TypeScript | ||
A JSON Schema viewer React component | ||||||||||
Jsoneditor | 71 | 2 | 4 | a year ago | 8 | July 29, 2019 | 7 | mit | JavaScript | |
A react visual json editor | ||||||||||
Nice React Layout | 69 | 3 | 3 | a year ago | 27 | October 23, 2020 | 23 | mit | JavaScript | |
Create complex and nice Flexbox-based layouts, without even knowing what flexbox means |
An extension of react-navigation that makes your header collapsible.
Try out the demo on Expo Snack
The Collapsible Tab-navigator is no longer supported due to the Android bug from react-native.
// Expo ONLY
import { disableExpoTranslucentStatusBar } from 'react-navigation-collapsible';
/* Call this If you have disabled Expo's default translucent statusBar. */
disableExpoTranslucentStatusBar();
import { Animated } from 'react-native';
import { useCollapsibleHeader } from 'react-navigation-collapsible';
const MyScreen = ({ navigation, route }) => {
const options = {
navigationOptions: {
headerStyle: { backgroundColor: 'green', height: 150 } /* Optional */,
headerBackground: <Image /> /* Optional */,
},
config: {
collapsedColor: 'red' /* Optional */,
useNativeDriver: true /* Optional, default: true */,
elevation: 4 /* Optional */,
disableOpacity: true /* Optional, default: false */,
},
};
const {
onScroll /* Event handler */,
onScrollWithListener /* Event handler creator */,
containerPaddingTop /* number */,
scrollIndicatorInsetTop /* number */,
/* Animated.AnimatedValue contentOffset from scrolling */
positionY /* 0.0 ~ length of scrollable component (contentOffset)
/* Animated.AnimatedInterpolation by scrolling */,
translateY /* 0.0 ~ -headerHeight */,
progress /* 0.0 ~ 1.0 */,
opacity /* 1.0 ~ 0.0 */,
} = useCollapsibleHeader(options);
/* in case you want to use your listener
const listener = ({nativeEvent}) => {
// I want to do something
};
const onScroll = onScrollWithListener(listener);
*/
return (
<Animated.FlatList
onScroll={onScroll}
contentContainerStyle={{ paddingTop: containerPaddingTop }}
scrollIndicatorInsets={{ top: scrollIndicatorInsetTop }}
/* rest of your stuff */
/>
);
};
See /example/src/DefaultHeaderScreen.tsx
See /example/src/StickyHeaderScreen.tsx
See /example/src/BackgroundHeaderScreen.tsx
import { Animated } from 'react-native';
import {
useCollapsibleSubHeader,
CollapsibleSubHeaderAnimator,
} from 'react-navigation-collapsible';
const MySearchBar = () => (
<View style={{ padding: 15, width: '100%', height: 60 }}>
<TextInput placeholder="search here" />
</View>
);
const MyScreen = ({ navigation, route }) => {
const {
onScroll /* Event handler */,
containerPaddingTop /* number */,
scrollIndicatorInsetTop /* number */,
translateY,
} = useCollapsibleSubHeader();
return (
<>
<Animated.FlatList
onScroll={onScroll}
contentContainerStyle={{ paddingTop: containerPaddingTop }}
scrollIndicatorInsets={{ top: scrollIndicatorInsetTop }}
/* rest of your stuff */
/>
{/* Wrap your component with `CollapsibleSubHeaderAnimator` */}
<CollapsibleSubHeaderAnimator translateY={translateY}>
<MySearchBar />
</CollapsibleSubHeaderAnimator>
</>
);
};
See /example/src/SubHeaderScreen.tsx
import { Animated } from 'react-native';
import { useCollapsibleHeader } from 'react-navigation-collapsible';
const MyScreen = ({ navigation, route }) => {
const options = {
navigationOptions: {
/* Add a custom header to 'useCollapsibleHeader' options the same way you would add it to the Stack.Screen options */
header: ({ scene, previous, navigation }) => {
const { options } = scene.descriptor;
const title =
options.headerTitle !== undefined
? options.headerTitle
: options.title !== undefined
? options.title
: scene.route.name;
return (
<MyHeader
title={title}
leftButton={
previous ? (
<MyBackButton onPress={navigation.goBack} />
) : (
undefined
)
}
style={options.headerStyle}
/>
);
},
},
};
const {
onScroll /* Event handler */,
containerPaddingTop /* number */,
scrollIndicatorInsetTop /* number */,
} = useCollapsibleHeader(options);
return (
<Animated.FlatList
onScroll={onScroll}
contentContainerStyle={{ paddingTop: containerPaddingTop }}
scrollIndicatorInsets={{ top: scrollIndicatorInsetTop }}
/* rest of your stuff */
/>
);
};
See /example/src/CustomHeaderScreen.tsx
react-navigation
recommends to use headerMode='screen'
when you use the custom header. [Set headerMode
to screen
]
# install module
yarn add react-navigation-collapsible
PR is welcome!
/example imports the library directly from the root folder, configured with babel-plugin-module-resolver.
So, just build the library with the watch
option and run the example.
yarn tsc -w
cd example && yarn ios