<Tab.Navigator
id="tabs"
tabBar={props => <FooterTabs {...props} style={{display: 'flex'}} />} //<-- add a style with display:flex means tabbar is visible by default
>
<Tab.Screen name="Home" component={HomeScreen} />
<Tab.Screen name="Search" component={SearchScreen} />
<Tab.Screen name="Chat" component={ChatScreen} />
</Tab.Navigator>
假设我们想隐藏聊天屏幕中的标签栏 在聊天屏幕中,输入这样代码
const ChatScreen = ({navigation}) => {
useEffect(() => {
navigation.getParent('tabs').setOptions({tabBarStyle: {display: 'none'}});
return ()=>{
//when leave this screen, and the hooks disposed, we set tabBarStyle to {}, means we will use the default style defined above, that is display:'flex'
navigation.getParent('tabs').setOptions({tabBarStyle: {}});
};
}, [navigation]);
...
const FooterTabs = props => {
const {state, navigation, descriptors, insets, style} = props;
const focusedRoute = state.routes[state.index];
const focusedDescriptor = descriptors[focusedRoute.key];
const focusedOptions = focusedDescriptor.options;
const {
tabBarShowLabel,
tabBarHideOnKeyboard = false,
tabBarVisibilityAnimationConfig,
tabBarStyle, //<-- this is get from options,which we set from sub screens
tabBarBackground,
tabBarActiveTintColor,
tabBarInactiveTintColor,
tabBarActiveBackgroundColor,
tabBarInactiveBackgroundColor,
} = focusedOptions;
return (
<HStack
style={{...props.style, ...tabBarStyle}} //<-- we set the style over here, so when in some specific screen set tabbarstyle to override the display property to 'none', can final make tabbar hidden
...
5条答案
按热度按时间vcudknz31#
有时候我会用这种方法
cpjpxq1n2#
我就是这么做的。
我正在寻找一种方法来隐藏tabBar在我的所有屏幕上的ProductsRoutes,除了主屏幕.(初始路线在ProductsRoutes导航器)
以下是产品导航器:
在我的选项卡上我正在使用的路由
了解ProductsNavigator上的哪个屏幕是主屏幕,哪个不是。基于该条件,我可以将display:'none'或'display:' flex '设置为Screen props上的tabBarStyle props:
希望这对你有所帮助
zlhcx6iw3#
将此传递给任何scrollview组件的onScroll
vof42yt14#
关键字是调用
setOptions
并将tabBarStyle
设置为{display:'none'}
首先,我们在父导航器上设置id,如
假设我们想隐藏聊天屏幕中的标签栏
在聊天屏幕中,输入这样代码
您可能注意到,根标签导航器中的标签栏是一个自定义组件,因此在
FooterTabs
中,关键代码如下所示上面代码是从official bottom tabbar component中获取的
5f0d552i5#
在我的例子中,我有一个堆栈导航器屏幕,在其中隐藏父导航器和祖导航器的tabBar和头。
如果只需要调整1个屏幕,则更简单的方法是在目标屏幕中运行代码,如下所述:
https://stackoverflow.com/a/70153935/1979861