我有一个组件,它返回一个包含几个屏幕的<Stack.Navigator>
。我还有一个定制的headerLeft
元素,它在单击时执行一个函数。现在,如果我在enterEmail
屏幕上,我试图隐藏headerLeft,但让它在所有其他屏幕上可见。
在实现我自己的后退按钮之前,我只是使用这个命令来隐藏enterEmail
屏幕上的后退按钮:
<Stack.Screen
name="EnterEmail"
options={{ title: LOGIN_TITLE, headerBackVisible: false }}
component={EnterEmail}
/>
但是现在我使用的是自定义元素,这就不起作用了。
const AuthStack: FunctionComponent = () => {
const navigation = useNavigation<LandingScreenNavigationProp>();
const headerTitle = <HeaderText variant="h5">Log in</HeaderText>;
return (
<Stack.Navigator
initialRouteName="Landing"
screenOptions={{
animation: authStackAnimation,
headerTitleAlign: 'center',
headerBackVisible: false,
headerLeft: () => <NavigationBackButton onPress={() => navigation.goBack()} />,
headerRight: () => <NavigationCloseButton onPress={() => navigation.navigate('Landing')} />,
}}
>
<Stack.Screen options={{ headerShown: false }} name="Landing" component={Landing} />
<Stack.Screen name="EnterEmail" options={{ headerTitle: () => headerTitle }} component={EnterEmail} />
<Stack.Screen name="EnterPassword" options={{ headerTitle: () => headerTitle }} component={EnterPassword} />
<Stack.Screen name="EnterOTP" options={{ headerTitle: () => headerTitle }} component={EnterOTP} />
<Stack.Screen
name="CheckYourEmail"
options={{ headerTitle: () => headerTitle }}
component={CheckYourEmail}
/>
</Stack.Navigator>
);
};
2条答案
按热度按时间webghufk1#
您需要覆盖堆栈屏幕中的组/导航器选项。
我已经创建了一个snack与标志和背景在导航器的水平,但堆栈屏幕覆盖它。
t2a7ltrp2#
您可以使用
useLayoutEffect
删除EnterEmail
屏幕中的headerLeft
按钮,如下所示。