reactjs - 从嵌套的 StackNavigator 中隐藏 TabBar 的 react 导航屏幕

标签 reactjs react-native navigation react-navigation

我是 react-navigation 的新手,并试图了解如何执行以下操作:

鉴于此导航结构:

RootTabNavigator 

  LoggedOut_StackNavigator

    ...

  LoggedIn_StackNavigator

    LoggedIn_TabNavigator <-- TabBar rendered by this Navigator

      TabA_StackNavigator

        ScreenA
        ScreenB

我希望能够使用典型的“从右侧滑入”过渡从 ScreenA 导航到 ScreenB,这样 TabBar ScreenA可见,但在ScreenB可见。换句话说,当我导航到 ScreenB 时,我希望它占据整个窗口。

用户从 ScreenA 转换到 ScreenB 后,他们可以按后退按钮返回到 ScreenA,或者导航到新的使用相同转换的路由,但 TabBar 仍然可见。

我尝试过的:

  • navigationOptions.tabBarVisible:此属性似乎仅在应用于 TabA_StackNavigator 本身时才起作用,这意味着所有屏幕在其堆栈中还隐藏了 TabBar。将其添加到 StackNavigator 内的屏幕没有任何效果。

  • 添加一个新的 AllScreens_StackNavigator 作为 LoggedIn_TabNavigator 的同级并导航到此导航器内的路线,我收到错误:Expect nav state to have路由和索引,{"routeName":"ScreenB", "params": {}, "key": "init-id-1516..."}。我派出的导航操作尝试执行此操作:

    {
      "action": Object {
        "params": Object {},
        "routeName": "ScreenB",
        "type": "Navigation/NAVIGATE",
      },
      "params": Object {},
      "routeName": "AllScreens_StackNavigator",
      "type": "Navigation/NAVIGATE",
    }
    

非常感谢任何帮助!

最佳答案

编辑:此答案与 react-nagivation v1.~(v2.0 之前)

根据评论中的建议,请参阅此问题:

https://github.com/react-navigation/react-navigation-tabs/issues/19

<小时/>

显然,内部组件的 navigationOptions 也会影响包含导航器的父导航器。

解决方案

这意味着这段代码应该适合您:

class ScreenB extends React.Component {
  static navigationOptions = {
    header: () => null,  //this will hide the Stack navigator's header (TabA_StackNavigator)
    tabBarVisible: false //this will hide the TabBar navigator's header (LoggedIn_TabNavigator)
  }

说明

首先,您可以设置每个屏幕(组件)的导航选项。您可以在上面或此处的代码片段中查看如何操作:React Navigation - Screen Navigation Options

第二,您尝试过:

Adding it to the screens inside the StackNavigator has no effect.

它不起作用,因为隐藏 StackNavigator 的 header 需要将 header 字段设置为 null

来自React Navigation documentation:

React Element or a function that given HeaderProps returns a React Element, to display as a header. Setting to null hides header

第三,使用tabBarVisible实际上是正确的,但它只影响 TabNavigator。为了使其仅对一个选项卡而不是对所有选项卡消失,您需要在特定屏幕上进行设置。在您的情况下,ScreenB

希望这有帮助!

关于reactjs - 从嵌套的 StackNavigator 中隐藏 TabBar 的 react 导航屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48301365/

相关文章:

javascript - 钩子(Hook)只能在函数组件体内调用。但它已经在一个函数中了

css - 没有导航栏元素的 Bootstrap 导航切换

react-native - AsyncStorage 安全吗?

android - @react-native-firebase/auth : app not authorized Error in signInWithPhoneNumber

react-native - 使用选项卡堆栈时 react 导航深层链接不起作用

CSS:需要菜单文本悬停效果(双重样式)帮助

javascript - 删除导航链接上的事件类

reactjs - 创建 React App 2 - 删除 html 属性以进行测试

ReactJS 动态禁用按钮

javascript - React 中动态创建的元素 - 如何进行控制?