我正在使用react导航 v5。我正在使用底部标签导航器。我想在活动选项卡的顶部添加一个边框。到目前为止,我尝试过的一切都没有奏效。这是我的导航文件(减去导入):
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>
)
}
我试图创建自己的自定义 tabIcon / tabBarButton 但如果选项卡处于活动状态,我不知道如何传递给 tabBarButton。道具“聚焦”或“导航”不会传递到 tabBarButton 函数中。我希望我的底部导航看起来像这里的图片
这是我的解决方案,您可以根据需要设置边框。