简体   繁体   English

反应本机底部标签栏导航

[英]React native bottom tab bar navigation

Hi I am using TabNavigator for showing tabs in bottom, Initially everything was working fine when tabs where only 4 as tabs are increased to 6tabs now they are congested and not looking properly, Can we add one more button on last and show the extra 2 tabs in that popover as like teams app.any help to achive this.您好,我正在使用 TabNavigator 在底部显示选项卡,最初一切正常,当只有 4 个选项卡增加到 6 个选项卡时一切正常,现在它们很拥挤并且看起来不正确,我们能否在最后添加一个按钮并显示额外的 2 个选项卡在该弹出窗口中,就像团队应用程序一样。任何有助于实现这一目标的帮助。

below is my code of TabNavigator:下面是我的 TabNavigator 代码:

 <Tab.Navigator
        // initialRouteName='StartupContainer'
        screenOptions={({ route }) => ({
          headerShown: false,
          tabBarHideOnKeyboard: true,
          tabBarStyle: {
            elevation: 0,
            borderTopWidth: 0,
            backgroundColor: "#F1F1F1",
            height: 70,
            paddingBottom: 10,
            fontFamily: "Outfit-Medium",
          },
          tabBarIcon: ({ focused, iconColor, iconName }) => {
            if (route.name === "Dashboard") {
              iconColor = focused ? "#F88022" : "grey";
              iconName = require("../Assets/Images/dashboardIcon.png");
              title = "dddd";
            } else if (route.name === "My Tasks") {
              iconColor = focused ? "#F88022" : "grey";
              iconName = require("../Assets/Images/MyTasks.png");
              title = "dddd";
            } else if (route.name === "Job Openings") {
              iconColor = focused ? "#F88022" : "grey";
              iconName = require("../Assets/Images/JobOpenings.png");
              title = "aaaaa";
            } else if (route.name === "Candidates") {
              iconColor = focused ? "#F88022" : "grey";
              iconName = require("../Assets/Images/Candidates.png");
              title = "5555";
            } else if (route.name === "Users") {
              iconColor = focused ? "#F88022" : "grey";
              iconName = require("../Assets/Images/users.png");
              title = "users";
            } else if (route.name === "Contracts") {
              iconColor = focused ? "#F88022" : "grey";
              iconName = require("../Assets/Images/contracts.png");
              title = "Contracts";
            } else if (route.name === "Assign Tasks") {
              iconColor = focused ? "#F88022" : "grey";
              iconName = require("../Assets/Images/assign_tasks.png");
              title = "AssignTasks";
            } else {
              // iconColor = focused ? '#3a86fe' : 'white'
              // iconName = 'user'
            }
            return <Image style={{ tintColor: iconColor }} source={iconName} />;
          },
          // title:"My Tasks",
          tabBarShowLabel: true,
          tabBarLabelStyle: { color: "#021668" },
        })}
      >
        {userDetails.role_id === 0 ? (
          <>
            <Tab.Screen name="Dashboard" component={DashboardStack} />
            <Tab.Screen name="My Tasks" component={MyTaskStack} options={{unmountOnBlur: true}}/>
            <Tab.Screen name="Job Openings" component={JobOpeningsStack} options={{unmountOnBlur: true}}/>
            <Tab.Screen name="Candidates" component={CandidateStack} options={{unmountOnBlur: true}}/>
          </>
        ) : (
          <>
            <Tab.Screen name="Dashboard" component={AdminDashboardStack} />
            <Tab.Screen name="Assign Tasks" component={AdminTasksStack} />
            <Tab.Screen name="Users" component={AdminUsersStack} />
            <Tab.Screen name="Contracts" component={AdminContractsStack} />
            <Tab.Screen name="Job Openings" component={AdminJobOpeningsStack} />
            <Tab.Screen name="Candidates" component={AdminCandidateStack} options={{unmountOnBlur: true}} />
          </>
        )}
      </Tab.Navigator>

oh... Tab.Screen has tabBarIcon option.哦... Tab.Screen 有 tabBarIcon 选项。 for example,例如,

import React from "react";
import { createBottomTabNavigator } from "@react-navigation/bottom-tabs";
import HomeScreen from "./tabs/home";
import BoardScreen from "./tabs/board";
import MyPageScreen from "./tabs/my_page";
import colors from "./utils/colors";
import { Image, StyleSheet } from "react-native";
import dp from "./utils/dp";

const Tab = createBottomTabNavigator();

export default function Tabs() {
    const tabs = [
        {
            name: "Home",
            screen: HomeScreen,
            iconPath: require("./icons/home_icon.png"),
            iconOffPath: require("./icons/home_icon_off.png"),
        },
        {
            name: "Board",
            screen: BoardScreen,
            iconPath: require("./icons/board_icon.png"),
            iconOffPath: require("./icons/board_icon_off.png"),
        },
        {
            name: "MyPage",
            screen: MyPageScreen,
            iconPath: require("./icons/mypage_icon.png"),
            iconOffPath: require("./icons/mypage_icon_off.png"),
        },
    ];

    return (
        <Tab.Navigator
            screenOptions={{
                headerShown: false,
                tabBarStyle: {
                    backgroundColor: colors.BackgroundColor(),
                },
            }}
            sceneContainerStyle={{ backgroundColor: colors.BackgroundColor() }}>
            {tabs.map((value, index) => (
                <Tab.Screen
                    key={index}
                    name={value.name + "Screen"}
                    component={value.screen}
                    options={{
                        tabBarShowLabel: false,
                        tabBarIcon: ({ focused }) =>
                            focused ? (
                                <Image source={value.iconPath} style={styles.icon} />
                            ) : (
                                <Image source={value.iconOffPath} style={styles.iconOff} />
                            ),
                    }}
                />
            ))}
        </Tab.Navigator>
    );
}
const styles = StyleSheet.create({
    icon: {
        width: dp(24),
        height: dp(24),
        resizeMode: "contain",
        tintColor: colors.MainColor(),
    },
    iconOff: {
        width: dp(24),
        height: dp(24),
        resizeMode: "contain",
        tintColor: "gray",
    },
});

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

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