【问题标题】:how to remove tab bar from a particular screen?如何从特定屏幕中删除标签栏?
【发布时间】:2020-09-01 06:07:01
【问题描述】:

我创建了一个带有 4 个选项卡导航器屏幕的导航器->主页、搜索、上传和库;我有堆栈导航屏幕,例如注册、登录、主页选项卡和视频。 现在,我想从上传屏幕中删除底部标签栏,但不确定是否可行?

下面是我写的具体代码:

import React from 'react';
import 'react-native-gesture-handler';
import {StatusBar} from 'react-native';
import {NavigationContainer, DarkTheme} from '@react-navigation/native';
import {createStackNavigator} from '@react-navigation/stack';
import {createMaterialBottomTabNavigator} from '@react-navigation/material-bottom-tabs';
import MaterialCommunityIcons from 'react-native-vector-icons/MaterialIcons';

import Home from '../screens/Home';
import Search from '../screens/Search';
import Library from '../screens/Library';
import ProfileAuthor from '../screens/ProffileAuthor';
import Shoot from '../screens/Shoot';
import LoginScreen from '../screens/LoginScreen';
import SignUp from '../screens/SignUp';

const Stack = createStackNavigator();
const Tab = createMaterialBottomTabNavigator();

function myTabs() {
  return (
    <Tab.Navigator
      initialRouteName="Home"
      activeColor="#000"
      inactiveColor="#000"
      barStyle={{
        backgroundColor: '#FFF',
      }}>
      <Tab.Screen
        name="Home"
        component={Home}
        options={{
          title: 'Home',
          tabBarLabel: 'Home',
          tabBarIcon: ({color}) => (
            <MaterialCommunityIcons color={color} name="home" size={26} />
          ),
        }}
      />
      <Tab.Screen
        name="Search"
        component={Search}
        options={{
          title: 'Search',
          tabBarLabel: 'Search',
          tabBarIcon: ({color}) => (
            <MaterialCommunityIcons color={color} name="search" size={26} />
          ),
        }}
      />
      <Tab.Screen
        name="Upload"
        component={Shoot}
        options={{
          title: 'Upload',
          tabBarLabel: 'Upload',
          tabBarIcon: ({color}) => (
            <MaterialCommunityIcons color={color} name="add-box" size={26} />
          ),
        }}
      />
      <Tab.Screen
        name="Library"
        component={Library}
        options={{
          title: 'Library',
          tabBarLabel: 'Library',
          tabBarIcon: ({color}) => (
            <MaterialCommunityIcons
              color={color}
              name="person-outline"
              size={26}
            />
          ),
        }}
      />
    </Tab.Navigator>
  );
}

const Routes = () => {
  return (
    <NavigationContainer theme={DarkTheme}>
      <Stack.Navigator>
        <Stack.Screen
          name="login"
          component={LoginScreen}
          options={{
            header: () => null,
          }}
        />
        <Stack.Screen
          name="signup"
          component={SignUp}
          options={{
            header: () => null,
          }}
        />
        <Stack.Screen
          name="Home"
          component={myTabs}
          options={{
            header: () => null,
          }}
        />
        
        <Stack.Screen
          name="Video"
          component={ProfileAuthor}
          options={{
            header: () => null,
          }}
        />
      </Stack.Navigator>
    </NavigationContainer>
  );
};

export default Routes;

谁能告诉我这种结构是否可行,如果可以,那么如何实现?任何帮助都会很棒。

【问题讨论】:

    标签: reactjs react-native react-native-android react-navigation react-navigation-bottom-tab


    【解决方案1】:

    tabBarVisiblefalse

    当您使用 @react-navigation/bottom-tabs 中的 createBottomTabNavigator 时,它可以正常工作。但是如果您将使用 @react-navigation/material-bottom-tabs 中的 createMaterialBottomTabNavigator 来创建底部标签,则它不起作用。 createMaterialBottomTabNavigator 不能隐藏标签栏,你可以看到文档中没有这个选项。如果您希望它在堆栈导航器的其他屏幕上消失,您应该尝试将底部选项卡导航器嵌套在堆栈导航器中。以下代码用于 createBottomTabNavigator 中的隐藏标签栏。

    import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
    
    const BottomTabs = createBottomTabNavigator();
    
    <BottomTabs.Navigator>
      <BottomTabs.Screen name={AppRoute.MORE} component={MoreStack}
            options={({ route }) => ({
                tabBarVisible: getTabBarVisibility(route),
                tabBarLabel: languages.stack_More
            })}
        />
    </BottomTabs.Navigator>
    
    
    const getTabBarVisibility = (route: any) => {
        const routeName = route.state ? route.state.routes[route.state.index].name: '';
       if (routeName === AppRoute.PROFILE
            || routeName === AppRoute.HELP_CENTER
            || routeName === AppRoute.TERMS_CONDITION) {
           return false;
        }
       return true;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-01
      • 2021-08-30
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多