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 } } } );
5 Réponses :
Non, ça ne devrait pas ... vous cachez la barre d'onglets ... dans un stacknavigator ... vous pouvez faire quelque chose de similaire à this . mais je ne sais pas comment vous le cacheriez sur un seul écran const StackHome = createStackNavigator(
{
Home: Home,
Autor: Autor,
Publicacion: Publicacion,
Comentarios: Comentarios
}
);
StackHome navigationOptions = ({ navigation }) => {
let tabBarVisible = true;
if (navigation.state.index > 0) {
tabBarVisible = false;
}
return {
tabBarVisible,
};
};
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?
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;
Faites comme ceci:
if(navigation.state.routes[navigation.state.index].routeName == "Comentarios"){ tabBarVisible = false; }
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, }; };
Veuillez mettre à jour votre question pour inclure une description de votre solution afin qu'elle soit plus claire pour les futurs visiteurs
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.
J'utilise react-navigation v5 et cela n'a aucun effet, dans mon cas, Expore
est un StackNavigator