繁体   English   中英

带有抽屉的 React Native v5 底部选项卡导航

[英]React Native v5 Bottom tab navigation with drawer

如果我使用的是e.preventDefault() (您在图像上看到的最右边的按钮e.preventDefault()有没有办法突出显示抽屉底部选项卡,并且在关闭时突出显示您上次离开的位置?

在此处输入图片说明

在此处输入图片说明

const BottomTabNavigation = ({ navigation }) => {
  return (
    <Tab.Navigator
      screenOptions={({ route }) => ({
        tabBarIcon: ({ focused }) => {
          let iconName;

          switch (route.name) {
            case 'Home':
              iconName = 'window-maximize';
              break;
            case 'Purchases':
              iconName = 'tags';
              break;
            case 'Notifications':
              iconName = 'bell';
              break;
            case 'Checkout':
              iconName = 'shopping-cart';
              break;
            case 'Orders':
              iconName = 'dollar';
              break;
            case 'Menu':
              iconName = 'navicon';
              break;
          }

          return (
            <Icon
              name={iconName}
              size={20}
              color={focused ? '#00bcd7' : 'grey'}
            />
          );
        },
      })}
      tabBarOptions={{
        showLabel: false,
      }}>
      <Tab.Screen name="Home" component={LandingScreens} />
      <Tab.Screen name="Purchases" component={PurchasesScreens} />
      <Tab.Screen name="Notifications" component={Notifications} />
      <Tab.Screen name="Checkout" component={CheckoutScreens} />
      <Tab.Screen name="Orders" component={OrdersScreens} />
      <Tab.Screen
        name="Menu"
        component={DrawerNavigation}
        listeners={({ navigation }) => ({
          tabPress: (e) => {
            navigation.openDrawer();
            e.preventDefault();
          },
        })}
      />
    </Tab.Navigator>
  );
};

const CustomDrawerContent = (props) => {
  return (
    <DrawerContentScrollView {...props}>
      {/* https://sunriseintegration.atlassian.net/browse/TSLMA-59*/}
      {/* https://sunriseintegration.atlassian.net/browse/TSLMA-60*/}
      {/*<DrawerItemList {...props} />*/}
    </DrawerContentScrollView>
  );
};

const DrawerNavigation = ({ navigation }) => {
  return (
    <DrawerNavigator.Navigator
      style={{ display: 'none' }}
      screenOptions={{
        headerStyle: {
          display: 'none',
        },
      }}
      drawerContent={(props) => <CustomDrawerContent {...props} />}>
      <DrawerNavigator.Screen
        name="BottomTabNavigation"
        component={BottomTabNavigation}
        options={{
          drawerLabel: () => null,
          title: null,
          drawerIcon: () => null,
        }}
      />
    </DrawerNavigator.Navigator>
  );
};

我最终弄明白了,不确定它是否是最好的解决方案,但很高兴它的工作......至少在我测试 iOS 时:

<Tab.Screen
    name="Menu"
    component={DrawerNavigation}
    listeners={({ navigation }) => ({
      tabPress: (e) => {
        e.preventDefault();
        navigation.toggleDrawer();
        navigation.setOptions({
          tabBarIcon: () => {
            return (
              <Icon
                name={'navicon'}
                size={20}
                color={useIsDrawerOpen() ? '#00bcd7' : 'grey'}
              />
            );
          },
        });
      },
    })}
  />

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM