Как скрыть нижнюю панель вкладок на определенном экране (реагировать на навигацию 5.x)

Я хотел знать, как скрыть нижнюю панель вкладок с определенного экрана внутри моего навигатора стека, мой код ниже. Я просто хочу скрыть нижние вкладки для экрана плеера или открыть экран плеера с модальным окном, может ли кто-нибудь мне помочь?

Это мой код для моего основного навигатора вкладок

import React from 'react';
import { StatusBar } from 'react-native';
import { NavigationContainer, DarkTheme } from '@react-navigation/native';
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';

//views
import HomeStack from './src/views/Home';
import SearchStack from './src/views/Search';
import MoviesStack from './src/views/Movies';
import SeriesStack from './src/views/Series';
import Other from './src/views/Other';

//icons
import {
    HomeIcon,
    SearchIcon,
    MovieIcon,
    SeriesIcon,
    OtherIcon,
} from './src/components/icons';

const Tab = createBottomTabNavigator();

export default function App() {
    return (
        <>
            <StatusBar barStyle="dark-content" />
            <NavigationContainer theme={DarkTheme}>
                <Tab.Navigator
                    initialRouteName="Home"
                    tabBarOptions={{
                        activeTintColor: 'white',
                        keyboardHidesTabBar: false,
                    }}
                >
                    <Tab.Screen
                        name="Home"
                        component={HomeStack}
                        options={{
                            tabBarLabel: 'Home',
                            tabBarIcon: ({ focused }) => (
                                <HomeIcon
                                    fill={focused ? 'white' : 'gray'}
                                    width={24}
                                    height={24}
                                />
                            ),
                        }}
                    />
                    <Tab.Screen
                        name="Search"
                        component={SearchStack}
                        options={{
                            tabBarLabel: 'Search',
                            tabBarIcon: ({ focused }) => (
                                <SearchIcon
                                    stroke={focused ? 'white' : 'gray'}
                                    width={24}
                                    height={24}
                                />
                            ),
                        }}
                    />
                    <Tab.Screen
                        name="Movie"
                        component={MoviesStack}
                        options={{
                            tabBarLabel: 'Movie',
                            tabBarIcon: ({ focused }) => (
                                <MovieIcon
                                    color={focused ? 'white' : 'gray'}
                                    width={24}
                                    height={24}
                                />
                            ),
                        }}
                    />
                    <Tab.Screen
                        name="Series"
                        component={SeriesStack}
                        options={{
                            tabBarLabel: 'Series',
                            tabBarIcon: ({ focused }) => (
                                <SeriesIcon
                                    color={focused ? 'white' : 'gray'}
                                    width={24}
                                    height={24}
                                />
                            ),
                        }}
                    />
                    <Tab.Screen
                        name="Other"
                        component={Other}
                        options={{
                            tabBarLabel: 'Other',
                            tabBarIcon: ({ focused }) => (
                                <OtherIcon
                                    fill={focused ? 'white' : 'gray'}
                                    width={24}
                                    height={24}
                                />
                            ),
                        }}
                    />
                </Tab.Navigator>
            </NavigationContainer>
        </>
    );
}

Это мой код для моего основного навигатора стека

import React from 'react';
import { View, Image } from 'react-native';
import { createStackNavigator } from '@react-navigation/stack';

//components
import Screen from '../components/Screen';
import HomeList from '../components/HomeList';

//views
import MovieDetail from './MovieDetail';
import SeriesDetail from './SeriesDetail';
import Player from './Player';

function Home({ navigation }) {
    return (
        <Screen>
            <View>
                <Image source={require('../../assets/logo.png')} />
                ...
            </View>
        </Screen>
    );
}

const Stack = createStackNavigator();

export default function HomeStack() {
    return (
        <Stack.Navigator
            screenOptions={{
                headerShown: false,
            }}
        >
            <Stack.Screen name="Home" component={Home} />
            <Stack.Screen name="MovieDetail" component={MovieDetail} />
            <Stack.Screen name="SeriesDetail" component={SeriesDetail} />
            <Stack.Screen name="Player" component={Player} />
        </Stack.Navigator>
    );
}

и это мой код для навигатора стека страницы, которую я использую для отправки данных на страницу, которую я хочу скрыть

import React from 'react';
import {
    View,
    Text,
    TouchableOpacity,
} from 'react-native';

//components
import Screen from '../components/Screen';
import Loading from '../components/Loading';


export default function MovieDetail({ route, navigation }) {
    const { id, title } = route.params;
    return (
        <Screen>
            <TouchableOpacity
                activeOpacity={0.7}
                onPress={() =>
                    navigation.navigate('Player', {
                        uri: 'https://blabla.com',
                    })
                }
            >
                <PlayIcon color="black" />
                <Text>
                    Play
                </Text>
            </TouchableOpacity>
        </Screen>
    );
}

и здесь я хочу скрыть панель вкладок на этом экране

import React from 'react';
import WebView from 'react-native-webview';

export default function Player({ route }) {
    const { uri } = route.params;
    return (
        <WebView source={{ uri }} />
    );
}

comment
Пожалуйста, покажите свой навигатор вкладок   -  person Bas van der Linden    schedule 20.07.2020
comment
Извини я сделал   -  person    schedule 20.07.2020


Ответы (1)


Чао, вы можете скрыть нижнюю панель вкладок на экране плеера следующим образом:

  1. Измените свой Tab.Screen Home следующим образом:
<Tab.Screen
    name="Home"
    component={HomeStack}
    options={({ route }) => ({
        tabBarLabel: 'Keşfet',
        tabBarIcon: ({ focused }) => (
            <HomeIcon
                fill={focused ? 'white' : 'gray'}
                width={24}
                height={24}
            />
        ),
        tabBarVisible: getTabBarVisibility(route),
    })}
/>
  1. Затем создайте функцию getTabBarVisibility, чтобы проверить, что имя корня - Player:
const getTabBarVisibility = (route) => {
    const routeName = route.state
        ? route.state.routes[route.state.index].name
        : '';

    if (routeName === 'Player') {
        return false;
    }

    return true;
};

Вот и все. Теперь, если вы перейдете на страницу Player, tabBar исчезнет.

person Giovanni Esposito    schedule 20.07.2020
comment
где включить функцию getTabBarVisibility? Я получаю следующую ошибку: Доступ к свойству «состояние» объекта «маршрут» не поддерживается. - person Butri; 15.12.2020
comment
@Butri Внутри функции приложения перед оператором возврата. - person Giovanni Esposito; 15.12.2020
comment
Я получаю одно и то же предупреждение. Доступ к свойству «состояние» объекта «маршрут» не поддерживается. Если вы хотите получить имя целевого маршрута, используйте вместо него помощник getFocusedRouteNameFromRoute: reactnavigation.org/docs/screen-options-resolution/ - person Butri; 15.12.2020