使用 Native Stack Navigator 时存在一些限制。其中之一是该手势仅在 iOS 上支持。请参阅本机堆栈导航器限制
您可以做的是用
GestureRecognizer
包装堆栈模式内容,并使用回调设置适当的事件,例如 () => props.navigation.goBack()
// navigator
import { createNativeStackNavigator } from '@react-navigation/native-stack';
const Stack = createNativeStackNavigator();
function App() {
return (
<View style={{ flex: 1 }}>
<Stack.Navigator>
<Stack.Group>
<Stack.Screen name='list' component={ListScreen} />
<Stack.Screen name='detail' component={DetailScreen} />
</Stack.Group>
<Stack.Group
screenOptions={{
presentation: 'modal',
animation: 'slide_from_bottom'
}}>
<Stack.Screen name='session' component={ModalScreen} />
</Stack.Group>
</Stack.Navigator>
</View>
);
}
// modal content
import GestureRecognizer from 'react-native-swipe-gestures';
import { Button, Text, View } from 'react-native';
function ModalScreen(props: { navigation: any }) {
return (
<GestureRecognizer style={{ flex: 1 }} onSwipeDown={() => props.navigation.goBack()} onUpDown={() => props.navigation.goBack()}>
<View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
<Text style={{ fontSize: 30 }}>This is a modal!</Text>
<Button onPress={() => props.navigation.goBack()} title='Dismiss' />
</View>
</GestureRecognizer>
);
你可以做什么,而不是使用可呈现的:“fullscreenmodal”使用普通屏幕
<Stack.Screen
name='preview/[id]'
options={{
animation: 'slide_from_bottom',
headerShown: false,
gestureDirection: 'vertical',
}}
/>