我有以下堆栈导航和屏幕:
export const HomeStack = createStackNavigator({
Home: HomeScreen,
Categories: CategoriesScreen,
Products: ProductsScreen,
ProductDetails: ProductDetailsScreen,
})
我只想在产品详细信息屏幕中隐藏选项卡:
export const hideTabBarComponents = [
'ProductDetails',
]
export const MainTabs = createBottomTabNavigator(
{
Home: HomeStack,
Favorite: FavoriteScreen,
Account: AccountScreen,
Help: HelpScreen,
Events: EventsScreen
},
{
navigationOptions: ({ navigation }) => ({
tabBarIcon: ({ focused, tintColor }) => {
...
},
tabBarLabel: ({ focused, tintColor }) => {
...
},
tabBarVisible: ! hideTabBarComponents.includes(navigation.state.routeName)
}),
}
);
问题是无法将任何选项从堆栈导航传递到选项卡导航
并非所有堆栈屏幕,仅其中之一
这就是我如何隐藏堆栈中特定屏幕中的选项卡栏(React Nav 5.x 和 6.x)
import { getFocusedRouteNameFromRoute } from '@react-navigation/native';
const ProfileStack = createStackNavigator();
const ProfileNavigator = ({ navigation, route }) => {
React.useLayoutEffect(() => {
const routeName = getFocusedRouteNameFromRoute(route);
if (routeName === "Group"){
navigation.setOptions({tabBarVisible: false});
}else {
navigation.setOptions({tabBarVisible: true});
}
}, [navigation, route]);
return(
<ProfileStack.Navigator>
<ProfileStack.Screen name="Profile" component={ProfileScreen} />
<ProfileStack.Screen name="Group" component={GroupScreen} />
</ProfileStack.Navigator>
)};
如果你们有多个屏幕需要隐藏选项卡栏,请使用这些路线名称的字符串数组,如果焦点路线名称包含在该数组中,则隐藏选项卡栏
const tabHiddenRoutes = ["Group","Map"];
if(tabHiddenRoutes.includes(getFocusedRouteNameFromRoute(route))){
navigation.setOptions({tabBarVisible: false});
}else{
navigation.setOptions({tabBarVisible: true});
}
[Edit]- 的情况下v6, use display
因为tabBarVisible
已被弃用,有利于tabBarStyle
-
if(tabHiddenRoutes.includes(getFocusedRouteNameFromRoute(route))){
navigation.setOptions({tabBarStyle: {display: 'none'}});
} else {
navigation.setOptions({tabBarStyle: {display: 'flex'}});
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)