import * as React from 'react'; import { Button, View, Text, Dimensions, Switch, TextInput, } from 'react-native'; import { createStackNavigator, CardStyleInterpolators, NavigationStackScreenProps, StackCardStyleInterpolator, } from 'react-navigation-stack'; const gestureResponseDistance = { vertical: Dimensions.get('window').height, }; const forVerticalInvertedIOS: StackCardStyleInterpolator = ({ current: { progress }, layouts: { screen }, }) => { const translateY = progress.interpolate({ inputRange: [0, 1], outputRange: [-screen.height, 0], }); return { cardStyle: { transform: [ // Translation for the animation of the current card { translateY }, ], }, }; }; class Modal extends React.Component { static navigationOptions = ({ navigation }: NavigationStackScreenProps) => { return { title: 'Modal', cardStyleInterpolator: navigation.getParam('gestureDirection', 'vertical') === 'vertical-inverted' ? forVerticalInvertedIOS : CardStyleInterpolators.forVerticalIOS, gestureDirection: navigation.getParam('gestureDirection', 'vertical'), cardTransparent: true, gestureResponseDistance, }; }; render() { return ( ); } } class ListScreen extends React.Component< NavigationStackScreenProps, { isInverted: boolean } > { // eslint-disable-next-line react/sort-comp static navigationOptions = { title: 'My Modal', }; state = { isInverted: false }; onSwitch = () => this.setState(prevState => ({ isInverted: !prevState.isInverted })); render() { return ( List Screen A list may go here