1
votes

Comment puis-je masquer la barre d'onglets du bas sur un écran spécifique (react-navigation 3.x)

J'ai utilisé le createBottomTabNavigator, mais je ne peux pas masquer la barre d'application inférieure sur un écran spécifique

const StackHome = createStackNavigator(
  {
    Home: Home,
    Autor: Autor,
    Publicacion: Publicacion,
    Comentarios: {
      screen: Comentarios,
      navigationOptions:{
        // this should do the work, but it doesn't
        tabBarVisible: false
      }
    }
  }
);


0 commentaires

5 Réponses :


1
votes

2 commentaires

Merci de répondre! votre code fonctionne parfaitement en cachant toute la barre d'application, mais je ne peux pas encore le faire fonctionner pour le cacher sur un écran spécifique


Comment puis-je le faire en V5?



10
votes

Enfin, j'ai une solution qui fonctionne, le composant serait comme ceci

import { createStackNavigator } from "react-navigation";
import Home from "./Home";
import Autor from "./Profile";
import Publicacion from "./Publicacion";
import Comentarios from "./Comentarios";

const StackHome = createStackNavigator({
  Home: Home,
  Autor: Autor,
  Publicacion: Publicacion,
  Comentarios: Comentarios
});

// This does the trick
StackHome.navigationOptions = ({ navigation }) => {
  let tabBarVisible;
  if (navigation.state.routes.length > 1) {
    navigation.state.routes.map(route => {
      if (route.routeName === "Comentarios") {
        tabBarVisible = false;
      } else {
        tabBarVisible = true;
      }
    });
  }

  return {
    tabBarVisible
  };
};

export default StackHome;


0 commentaires

0
votes

Faites comme ceci:

if(navigation.state.routes[navigation.state.index].routeName == "Comentarios"){
tabBarVisible = false;
}


0 commentaires

1
votes
const routesWithNoTabNavigator = ['nameOfYourRoute', 'nameOfYourOtherRoute'];

<yourStackHere>.navigationOptions = ({ navigation }) => {
  let tabBarVisible = true;
  const currentRoute = 
        navigation.state.routes[navigation.state.routes.length -1].routeName;
  if(routesWithNoTabNavigator.includes(currentRoute)) {
      tabBarVisible = false;
  }

  return {
   tabBarVisible,
  };
};

1 commentaires

Veuillez mettre à jour votre question pour inclure une description de votre solution afin qu'elle soit plus claire pour les futurs visiteurs



0
votes

si votre écran est également une navigation de pile imbriquée et que le parent est une navigation en bas, il existe un accessoire de navigation sur la fonction d'options que vous pouvez utiliser. par exemple :

const BottomTab = createBottomTabNavigator();

const Home = () => (
  <BottomTab.Navigator
    initialRouteName="Explore"
    tabBarOptions={{
      activeTintColor: "#00B0F0",
    }}
  >
    <BottomTab.Screen
      name="Explore"
      component={Explore}
      options={({ navigation }) => {
        const { routes, index } = navigation.dangerouslyGetState();
        const { state: exploreState } = routes[index];
        let tabBarVisible = true;
        if (exploreState) {
          const { routes: exploreRoutes, index: exploreIndex } = exploreState;
          const exploreActiveRoute = exploreRoutes[exploreIndex];
          if (exploreActiveRoute.name === "RewardDetail") tabBarVisible = false;
        }
        return {
          tabBarVisible,
          title: "Explore",
          tabBarLabel: "Explore",
          tabBarIcon: ({ color, size }) => (
            <AntDesign name="search1" color={color} size={size} />
          ),
        };
      }}
    />

notez que vous devrez utiliser si les conditions là en tant qu'accessoires ne sont pas présentes lorsqu'elles ne sont pas activées, faites simplement comme mon exemple. Il y a aussi une suggestion de la documentation: https://reactnavigation.org/docs/ hiding-tabbar-in-screens / personnellement, je le ferais s'il n'y a pas d'option d'utilisation tabBarVisible.


1 commentaires

J'utilise react-navigation v5 et cela n'a aucun effet, dans mon cas, Expore est un StackNavigator