【问题标题】:How to use drawer navigator and tab navigator simultaneously?如何同时使用抽屉导航器和标签导航器?
【发布时间】:2020-07-21 12:39:24
【问题描述】:

这是我的标签导航器:

<Tab.Navigator initialRouteName="Home" backBehavior="initialRoute">
  <Tab.Screen
    name="Science"
    component={Science}
    options={{
      tabBarLabel: 'Science',
      tabBarIcon: ({color, size}) => (
        <Image source={require('../../assets/images/science-tab.png')} />
      ),
    }}
  />
  <Tab.Screen name="Dashboard" component={Dashboard} />
</Tab.Navigator>

这是抽屉导航器:

<Drawer.Navigator initialRouteName="Home">
  <Drawer.Screen name="Home" component={HomeScreen} />
  <Drawer.Screen name="Notifications" component={NotificationsScreen} />
</Drawer.Navigator>

这是我的根导航器:底部导航下方是选项卡导航器。

<NavigationContainer>
  <Stack.Navigator>
    <Stack.Screen
      name="BottomNavigation"
      component={BottomNavigation}
      options={{title: this.createTitle()}}
    />
  </Stack.Navigator>
</NavigationContainer>

【问题讨论】:

    标签: react-native react-navigation


    【解决方案1】:

    我建议您将TabNavigator 设为DrawerNavigator 的屏幕

    你可以这样做:

    function TabNavigator({navigation}) {
      return (
        <Tab.Navigator>
          // Your tab screens
        </Tab.Navigator>
      );
    }
    
    function DrawerNavigator() {
      return (
        <Drawer.Navigator>
          <Drawer.Screen name="TabNavigator" component={TabNavigator} />
        </Drawer.Navigator>
      );
    }
    
    const App = () => {
      return (
        <NavigationContainer>
          <Stack.Navigator>
            <Stack.Screen name="DrawerNavigator" component={DrawerNavigator} />
          </Stack.Navigator>
        </NavigationContainer>
      );
    };
    

    如果你想打开你的抽屉,你可以在你的TabNavigator中拨打navigation.openDrawer()

    更新以解决标签问题

    您可以创建抽屉内容组件来覆盖将DrawerNavigator 屏幕标签添加为抽屉内容的默认行为。

    function CustomDrawerContent(props) {
      return (
        <DrawerContentScrollView {...props}>
          <DrawerItem
            label="Home"
            onPress={() => props.navigation.navigate('Home')}
          />
          // ...
        </DrawerContentScrollView>
      );
    }
    

    那你需要把DrawerNavigator改成这样:

    function DrawerNavigator({route}) {
      return (
        <Drawer.Navigator
          drawerContent={(props) => <CustomDrawerContent {...props} />}>
          <Drawer.Screen name="TabNavigator" component={TabNavigator} />
          <Drawer.Screen name="Home" component={Home} />
        </Drawer.Navigator>
      );
    }
    

    因此,您可以将新屏幕添加到 DrawerNavigator 并使用 DrawerItem onPress 函数导航到它们。

    当然要确保从@react-navigation/drawer 导入DrawerContentScrollViewDrawerItemListDrawerItem

    欲了解更多信息,请查看:https://reactnavigation.org/docs/drawer-navigator/#providing-a-custom-drawercontent

    【讨论】:

    • 但问题是我不想在抽屉中显示该选项卡导航器标签。相反,我想用新的路线制作自定义抽屉。在抽屉导航器屏幕中添加选项卡导航器会在抽屉中添加一个标签。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-26
    • 2019-09-23
    • 1970-01-01
    • 1970-01-01
    • 2018-11-12
    • 1970-01-01
    相关资源
    最近更新 更多