I'm using react navigation v5. I am using the bottom tab navigator. I want to add a border to the top of the active tab. So far everything I've tried has not worked. Here is my navigation file (minus the imports):
const AuthStack = createStackNavigator()
const InfoStack = createStackNavigator()
const PhotoStack = createStackNavigator()
const ProfitStack = createStackNavigator()
const RehabStack = createStackNavigator()
const DrawerNav = createDrawerNavigator()
const TabNav = createBottomTabNavigator()
const createAuthStack = () => (
<AuthStack.Navigator>
<AuthStack.Screen name='Sign Up' component={SignUpScreen} />
<AuthStack.Screen name='Sign In' component={SignInScreen} />
</AuthStack.Navigator>
)
const stackOptions = {
headerStyle: {
backgroundColor: colors.colorGrayLight,
borderBottomColor: colors.colorPrimary,
borderBottomWidth: 2
},
}
const createInfoStack = () => (
<InfoStack.Navigator screenOptions={stackOptions}>
<InfoStack.Screen name='Info Stack' component={PropertyInfoScreen} />
</InfoStack.Navigator>
)
const createProfitStack = () => (
<ProfitStack.Navigator screenOptions={stackOptions}>
<PhotoStack.Screen name='Profit Stack' component={ProfitCalculatorScreen} />
</ProfitStack.Navigator>
)
const createRehabStack = () => (
<RehabStack.Navigator screenOptions={stackOptions}>
<RehabStack.Screen name='Rehab Stack' component={RehabCostsScreen} />
</RehabStack.Navigator>
)
const createPhotosStack = () => (
<PhotoStack.Navigator screenOptions={stackOptions}>
<PhotoStack.Screen name='Photo Stack' component={PropertyPhotosScreen} />
</PhotoStack.Navigator>
)
const createScreenOptions = ({ focused, color, route }) => {
let imgSrc
switch (route.name.toLowerCase()) {
case 'info':
imgSrc = images.iconPropertyInfo
break
case 'profit':
imgSrc = images.iconProfit
break
case 'rehab':
imgSrc = images.iconRehab
break
case 'photos':
imgSrc = images.iconPhotos
break
}
return {
tabBarIcon: ({ focused, color }) => (
<View style={{ alignItems: 'center', marginTop: 10 }}>
<Image
source={imgSrc}
resizeMode='contain'
style={{
width: 25,
height: 25,
tintColor: color,
}}
/>
<Text style={{ color: color, fontSize: 12 }}>{route.name}</Text>
</View>
),
tabBarButton: (props) => {
return (
<TabBarButton {...props} />
)
}
}
}
const createTabNav = ({ route, navigation}) => {
const focusedRoute = getFocusedRouteNameFromRoute(route)
return (
<TabNav.Navigator
tabBarOptions={{
activeTintColor: colors.colorPrimary,
inactiveTintColor: colors.colorCharcoal,
keyboardHidesTabBar: true,
allowFontScaling: false,
style: {
backgroundColor: colors.colorGrayLight,
},
labelStyle: {
fontSize: 12,
},
showLabel: false,
}}>
<TabNav.Screen name='Info' component={createInfoStack} options={createScreenOptions}/>
<TabNav.Screen name='Profit' component={createProfitStack} options={createScreenOptions} />
<TabNav.Screen name='Rehab' component={createRehabStack} options={createScreenOptions} />
<TabNav.Screen name='Photos' component={createPhotosStack} options={createScreenOptions} />
</TabNav.Navigator>
)
}
export default MainNav = () => {
const [isAuthenticated, setIsAuthenticated] = useState(false)
return (
<NavigationContainer>
<DrawerNav.Navigator>
<DrawerNav.Screen name='Main' component={createTabNav} />
</DrawerNav.Navigator>
</NavigationContainer>
)
}
I attempted to create my own custom tabIcon / tabBarButton but I don't know how to pass in to the tabBarButton if the tab is active or not. The props "focused" or "navigation" are not passed into the tabBarButton function. I want my bottom nav to look like the picture here