如何仅在特定屏幕(例如主屏幕)上启用抽屉导航 [react native] [react navigation]

Posted

技术标签:

【中文标题】如何仅在特定屏幕(例如主屏幕)上启用抽屉导航 [react native] [react navigation]【英文标题】:How to enable Drawer Navigation only on specific screen (e.g. Home Screen) [react native] [react navigation] 【发布时间】:2021-10-15 21:07:49 【问题描述】:

此问题的用例是让抽屉菜单(如“设置”)仅在“主屏幕”中可用。在“主屏幕”上可能有许多按钮,这些按钮链接到没有抽屉可用的堆栈导航的其他屏幕。

主要问题是如何仅在 Stack Navigator 的特定屏幕上启用抽屉导航? 在下面的示例中,Drawer 在 Stack 的所有页面上都可用。我尝试使用gestureEnabled,但没有成功:

  const StackHome = () => (
    <Stack.Navigator>
      <Stack.Screen name="Home" component=Home />
      <Stack.Screen name="Example1" component=Example1 />
      <Stack.Screen name="Example2" component=Example2 />
    </Stack.Navigator>
  );
  <Drawer.Navigator initialRouteName="Home">
      <Drawer.Screen name="Home" component=StackHome />
      <Drawer.Screen name="Settings" component=Settings />
  </Drawer.Navigator>

另一方面,如果我尝试将Drawer 设置为Stack 屏幕之一,那么我总是有相同的标题栏(例如“标题”)

【问题讨论】:

【参考方案1】:

将抽屉导航器放在主屏幕内:

const DrawerHome = () => (
  <Drawer.Navigator screenOptions= headerShown: true >
    <Drawer.Screen name="Home" component=Home />
    <Drawer.Screen name="Settings" component=Settings />
  </Drawer.Navigator>
);

const StackHome = () => (
  <Stack.Navigator>
    <Stack.Screen
      name="DrawerHome"
      component=DrawerHome
      options= headerShown: false 
    />
    <Stack.Screen name="Example1" component=Example1 />
    <Stack.Screen name="Example2" component=Example2 />
  </Stack.Navigator>
);

【讨论】:

你是对的。剩下要做的就是在这个屏幕上隐藏 Stack Header 并在 Drawer 上显示标题。

以上是关于如何仅在特定屏幕(例如主屏幕)上启用抽屉导航 [react native] [react navigation]的主要内容,如果未能解决你的问题,请参考以下文章

如何重置抽屉导航器打开的屏幕状态?

仅在特定屏幕中对物理后退按钮按下执行减速器操作以响应本机

应用小部件仅在主屏幕上显示为灰色

如何在 KivyMD (Python) 中结合导航抽屉和多个屏幕?

如何将数据传递到屏幕上的抽屉customcomponent in react native?

在 Scaffold Jetpack Compose 内的特定屏幕上隐藏顶部和底部导航器