在多个堆栈导航器上隐藏多个屏幕中的底部选项卡

发布于 2025-02-03 17:55:35 字数 1640 浏览 5 评论 0原文

AppNavigator组件,基本上只是底部选项卡,指向多个嵌套堆栈导航器。

appNavigator.js

const Tab = createMaterialBottomTabNavigator();
export const AppNavigator = () => {
  return (
    <Tab.Navigator>
      <Tab.Screen name="Search" component={SearchStack} />
      <Tab.Screen name="Host" component={HostStack} />
      <Tab.Screen name="More" component={MoreStack} />
    </Tab.Navigator>
  );
};

例如,我的hostsstack.js

const Stack = createStackNavigator();

export const HostNavigator = ({ navigation }) => {
  return (
    <Stack.Navigator>
      <Stack.Screen name="First" component={FirstScreen} />
      <Stack.Screen name="Second" component={SecondScreen} />
    </Stack.Navigator>
  );
};

morestack.js

const Stack = createStackNavigator();

export const MoreStack = ({ navigation }) => {
  return (
    <Stack.Navigator>
      <Stack.Screen name="Third" component={ThirdScreen} />
      <Stack.Screen name="Fourth" component={FourthScreen} />
    </Stack.Navigator>
  );
};

我想隐藏底部标签在<<<代码> secondscreen 和第四屏幕,而在初始屏幕中仍应可见firstScreenthirdscreen。我应该怎么做到这一点? I tried referencing https://reactnavigation.org/docs/hiding-tabbar-in-屏幕/实际上有效,但前提是我有一个嵌套堆栈,而不是我想要的三个。对于其他Stackoverflow问题也是如此,我找不到解决多个堆栈的解决方案。

我正在使用React Navigation 6。

任何帮助都非常感谢!

The AppNavigator component, which is basically just bottom tabs, points to multiple nested stack navigators.

AppNavigator.js:

const Tab = createMaterialBottomTabNavigator();
export const AppNavigator = () => {
  return (
    <Tab.Navigator>
      <Tab.Screen name="Search" component={SearchStack} />
      <Tab.Screen name="Host" component={HostStack} />
      <Tab.Screen name="More" component={MoreStack} />
    </Tab.Navigator>
  );
};

Here is, for example, my HostStack.js:

const Stack = createStackNavigator();

export const HostNavigator = ({ navigation }) => {
  return (
    <Stack.Navigator>
      <Stack.Screen name="First" component={FirstScreen} />
      <Stack.Screen name="Second" component={SecondScreen} />
    </Stack.Navigator>
  );
};

And MoreStack.js:

const Stack = createStackNavigator();

export const MoreStack = ({ navigation }) => {
  return (
    <Stack.Navigator>
      <Stack.Screen name="Third" component={ThirdScreen} />
      <Stack.Screen name="Fourth" component={FourthScreen} />
    </Stack.Navigator>
  );
};

I want to hide bottom tabs navigation in SecondScreen and FourthScreen, while it should still be visible in initial screens FirstScreen and ThirdScreen. How should I accomplish this? I tried referencing https://reactnavigation.org/docs/hiding-tabbar-in-screens/ and it actually works, but only if I have one nested stack, not three as I would want to. Same for other stackoverflow questions, I haven't been able to find a solution which incoporates multiple stacks.

I am using React Navigation 6.

Any help is really appreciated!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

寄居人 2025-02-10 17:55:36
  1. 在应用程序的顶层创建一个包含两个屏幕的堆栈:您的Tab Navigator和一个新的堆栈(即Notabbar或其他内容)。
  2. 拿起所有想要将标签栏隐藏在您现在拥有的堆栈中的所有屏幕,然后将它们移入新的堆栈中。
  3. 从标签堆栈内导航到这些屏幕。

下面的伪代码:

// TabNavigator.jsx - for this you could just rename your AppNavigator to TabNavigator
// NoTabBarStack.jsx
const Stack = createStackNavigator();
export const NoTabBarStack = ({ navigation }) => {
  return (
    <Stack.Navigator>
      <Stack.Screen name="Second" component={SecondScreen} />
      <Stack.Screen name="Fourth" component={FourthScreen} />
    </Stack.Navigator>
  );
};
// AppNavigator.jsx
const Stack = createStackNavigator();
export const AppNavigator = () => {
  return (
    <Stack.Navigator>
      <Stack.Screen name="Tabs" component={TabNavigator} />
      <Stack.Screen name="NoTabBar" component={NoTabBarStack} />
    </Stack.Navigator>
  );
};

然后,当您在第一屏上时,请调用navigate('notabbar',{屏幕:second}),并且标签栏将被隐藏。

  1. Create a stack at the top level of your app that contains two screens: your tab navigator, and a new stack (i.e. NoTabBar or something).
  2. Take all the screens you want to hide the tab bar on out of the stacks you have them in now, and move them into that new stack.
  3. Navigate to those screens from inside your tab stacks.

Pseudocode below:

// TabNavigator.jsx - for this you could just rename your AppNavigator to TabNavigator
// NoTabBarStack.jsx
const Stack = createStackNavigator();
export const NoTabBarStack = ({ navigation }) => {
  return (
    <Stack.Navigator>
      <Stack.Screen name="Second" component={SecondScreen} />
      <Stack.Screen name="Fourth" component={FourthScreen} />
    </Stack.Navigator>
  );
};
// AppNavigator.jsx
const Stack = createStackNavigator();
export const AppNavigator = () => {
  return (
    <Stack.Navigator>
      <Stack.Screen name="Tabs" component={TabNavigator} />
      <Stack.Screen name="NoTabBar" component={NoTabBarStack} />
    </Stack.Navigator>
  );
};

Then, when you're on FirstScreen, call navigate('NoTabBar', {screen: Second}) and the tab bar will be hidden.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文