React-native navigation, hide bottom tab - react-native

I have this
<NavigationContainer>
<Tab.Navigator
>
<Tab.Screen
name="Галерея" component={Gallery}
/>
<Tab.Screen
}
}}
name="Избранное" component={Favorites}
/>
<Tab.Screen
name="{item}" component={PhotoScreen}
/>
</Tab.Navigator>
</NavigationContainer>
And i dont wanna show last bottom tab on the bottom menu
How can i hide it?
Maybe i need to create one more Stack?
or i can hide it with some options?

Related

How to navigate to a screen which is not on the <Tab.Navigator> in React-Nativ?

I have a <Tab.Navigator> and it has four <Tab.Screen> elements. What i try to do is, to press a button inside a specific <Tab.Screen> and open an another screen on top of it. But i don't want this another screen to have a <Tab.Screen> navigator in the <Tab.Navigator> bar.
I thought maybe there's an option to hide, make invisible a <Tab.Screen> but i couldn't find any documentation about it.
Is it possible to achieve this ?
According the official doc. You can reorganize your navigation and put the bottom tabs navigator inside the stack navigator like this
function HomeTabs() {
return (
<Tab.Navigator> // Here you can also navigate to both Profile and Settings
<Tab.Screen name="Home" component={Home} />
<Tab.Screen name="Feed" component={Feed} />
<Tab.Screen name="Notifications" component={Notifications} />
</Tab.Navigator>
);
}
function App() {
return (
<Stack.Navigator>
<Stack.Screen name="Home" component={HomeTabs} />
<Stack.Screen name="Profile" component={Profile} /> // Here you won't have any tabs
<Stack.Screen name="Settings" component={Settings} /> // Here neither
</Stack.Navigator>
);
}
You have to nest navigators with the stack navigator as the outer navigator and the tab navigator as the inner navigator:
https://reactnavigation.org/docs/nesting-navigators
You have to reorganize your navigation structure , as documentation describe https://reactnavigation.org/docs/hiding-tabbar-in-screens
Let's say we have 5 screens: Home, Feed, Notifications, Profile and Settings, and your navigation structure looks like this:
function HomeStack() {
return (
<Stack.Navigator>
<Stack.Screen name="Home" component={Home} />
<Stack.Screen name="Profile" component={Profile} />
<Stack.Screen name="Settings" component={Settings} />
</Stack.Navigator>
);
}
function App() {
return (
<Tab.Navigator>
<Tab.Screen name="Home" component={HomeStack} />
<Tab.Screen name="Feed" component={Feed} />
<Tab.Screen name="Notifications" component={Notifications} />
</Tab.Navigator>
);
}
With this structure, when we navigate to the Profile or Settings screen, the tab bar will still stay visible over those screens.
But if we want to show the tab bar only on the Home, Feed and Notifications screens, but not on the Profile and Settings screens, we'll need to change the navigation structure. The easiest way to achieve this is to nest the tab navigator inside the first screen of the stack instead of nesting stack inside tab navigator:
function HomeTabs() {
return (
<Tab.Navigator>
<Tab.Screen name="Home" component={Home} />
<Tab.Screen name="Feed" component={Feed} />
<Tab.Screen name="Notifications" component={Notifications} />
</Tab.Navigator>
);
}
function App() {
return (
<Stack.Navigator>
<Stack.Screen name="Home" component={HomeTabs} />
<Stack.Screen name="Profile" component={Profile} />
<Stack.Screen name="Settings" component={Settings} />
</Stack.Navigator>
);
}
After re-organizing the navigation structure, now if we navigate to the Profile or Settings screens, the tab bar won't be visible over the screen anymore.

Show/Hide bottom tab navigator when scrolling

I have a bottom tab bar, and I want when scrolling in the home screen to hide it exactly like LinkedIn.
How can this be done with smooth animation ?
Like when I scroll up and down I want to hide it (with animation) and when stop scrolling to show it again.
Also, I have a Custom Bottom Tab.
Here is my implementation:
<Tab.Navigator
tabBar={(props) => <CustomBottomNavbar {...props} />}
initialRouteName="Home"
>
<Tab.Screen name="Home" component={Home} />
<Tab.Screen name="Explore" component={Explorer} />
...
</Tab.Navigator>

How to create and use many Tab Navigator in react native?

I'm trying to create differents bottom tab navigator in a single application in react native.
At the moment I can create and use a single one properly, but I'd like to display another one when I've connected to the application by the authentification form.
Is it possible ?
Here is an example of my code that will help you to understand what I'd like to do if you didn't :
export default function AppNavigation() {
return (
<NavigationContainer>
<Tab.Navigator>
<Tab.Screen name="SignUp" component={SignUpFunction} />
<Tab.Screen name="SignIn" component={SignInFunction} />
</Tab.Navigator>
</NavigationContainer>
);
}
and I would like to create another one like :
export default function AppNavigation() {
return (
<NavigationContainer>
<Tab.Navigator>
<Tab.Screen name="SignUp" component={SignUpFunction} />
<Tab.Screen name="SignIn" component={SignInFunction} />
</Tab.Navigator>
<Tab.Navigator>
<Tab.Screen name="Profil" component={ProfilPageFunction} />
</Tab.Navigator>
</NavigationContainer>
);
}
My problem is that it is not possible having two Tab.Navigator
I don't find documentation talking about it on the internet. If you guys have one or are able to explain me how to do it would be awesome.
By mentioning 'Different tab navigators' I'll assume that you want to have tab navigators in different screens.
There are options to do this.
First one based on the tab names that you have provided, you are trying to have an authentication flow, the approach would be to render tabs based on the login state.
export default function AppNavigation() {
return (
<NavigationContainer>
{!isloggedIn?(<Tab.Navigator>
<Tab.Screen name="SignUp" component={SignUpFunction} />
<Tab.Screen name="SignIn" component={SignInFunction} />
</Tab.Navigator>):
(<Tab.Navigator>
<Tab.Screen name="Profil" component={ProfilPageFunction} />
</Tab.Navigator>)}
</NavigationContainer>
);
}
Here isloggedIn will come from your context or state or however you manage the state.
Second option is to have multiple screen in a stack navigator with tab navigators, this is called nesting navigators
inside each screen
function Home() {
return (
<Tab.Navigator>
<Tab.Screen name="Feed" component={Feed} />
<Tab.Screen name="Messages" component={Messages} />
</Tab.Navigator>
);
}
//inside the NavigationContainer
<Stack.Screen name="Home" component={Home} />
Both approaches would work

React Native Tab Navigator first tab is focused by default

I'm using React Native BottomTabNavigator.
Example:
<Tab.Navigator tabBarOptions={tabBarOptions} screenOptions={screenOptions}>
<Tab.Screen name="Home" component={Home} />
<Tab.Screen name="Saved" component={Saved} />
<Tab.Screen name="Map" component={Map} />
<Tab.Screen name="Profile" component={Profile} />
</Tab.Navigator>
I want to make the last tab focused instead of the first.
I can't find any option in the documentation.
It should be something like options={{ focused: true }}
Or maybe it's not implemented at all
<Tab.Navigator initialRouteName={"Your Initial Screen Name"}
...>
</Tab.Navigator>

React Native Custom icon / image in Tab.Screen navigation

I have a bottomtab in my React Native setup;
<NavigationContainer>
<Tab.Navigator>
<Tab.Screen name="News" component={News} />
<Tab.Screen name="Mens" component={Mens} />
<Tab.Screen name="Ladies" component={Ladies} />
<Tab.Screen name="Watch" component={Fixtures} />
</Tab.Navigator>
</NavigationContainer>
What I'd like to do is add in the middle a dummy Tab so I can add a custom icon;
<NavigationContainer>
<Tab.Navigator>
<Tab.Screen name="News" component={News} />
<Tab.Screen name="Mens" component={Mens} />
<Tab.Screen name="logo" />
<Tab.Screen name="Ladies" component={Ladies} />
<Tab.Screen name="Watch" component={Fixtures} />
</Tab.Navigator>
</NavigationContainer>
The challenge I'm having is where to start (TabBarOptions doesn't appear to work within the tab.screen). I've found loads of explains (they seem like overkill for adding an icon), but they all use pre-defined icon sets. What I want to do is create an icon from a custom image and then use that for the logo tab so it appears in my bottom navigation.
You can set the tabbaricon like below. The there are parameters for focused as well which you can use to set images based on condition.
<Tab.Screen
name="Settings1"
component={SettingsScreen}
options={{
title: 'My profile',
tabBarIcon: ({size,focused,color}) => {
return (
<Image
style={{ width: size, height: size }}
source={{
uri:
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADMAAAAzCAYAAAA6oTAqAAAAEXRFWHRTb2Z0d2FyZQBwbmdjcnVzaEB1SfMAAABQSURBVGje7dSxCQBACARB+2/ab8BEeQNhFi6WSYzYLYudDQYGBgYGBgYGBgYGBgYGBgZmcvDqYGBgmhivGQYGBgYGBgYGBgYGBgYGBgbmQw+P/eMrC5UTVAAAAABJRU5ErkJggg==',
}}
/>
);
},
}}
/>