react-native-router-flux:切换标签时如何保留父导航栏?

时间:2017-03-17 05:45:03

标签: react-native react-native-router-flux

我目前在路由器中有以下内容:

<Scene key="results" title="Query Results"
    tabs={true} tabBarStyle={style.tabBarStyle}>
    <Scene
      key="listResultsTab"
      title="List"
      icon={TabIcon}
    >
      <Scene key="listResults" component={ListResultsScene} title="Results List" />
    </Scene>

    <Scene
      key="mapResultsTab"
      title="Map"
      icon={TabIcon}
    >
      <Scene key="mapResults" component={MapResultsScene} title="Results Map" />
    </Scene>
</Scene>

到目前为止,它创建了一个标签栏,其中有两个标签,它们在ListResults和MapResults组件之间交替,这就是我想要的。但是,每个选项卡都保留了自己的导航栏。这不一定是一个问题,除了它覆盖父导航栏,因此我无法访问查询结果之前的任何内容。

我的理想设置如下:

launchScreen --> queryResults----->listResults -> ... ->
                   |
                   -->mapResults-> ... ->

有没有办法在标签之间切换时保留queryResults的导航栏?

docs

  

每个标签都有自己的导航栏。但是,如果您未使用hideNavBar = {true}设置其父级,则选项卡的导航栏将被其父级覆盖。

然而,情况似乎并非如此。我没有使用hideNavBar,并且父级的导航栏仍被选项卡覆盖。我想也许我可以在标签上使用hideNavBar,但这只是完全删除了navBar。

编辑:使用更详细的信息进行更新。

这是我的完整场景列表。

import React from 'react';
import {StyleSheet, Text } from 'react-native';
import { Actions, Scene, ActionConst } from 'react-native-router-flux';
import LaunchScene from '../scenes/LaunchScene';
import LoginScene from '../scenes/LoginScene';
import WorkspaceSelectionScene from '../scenes/WorkspaceSelectionScene';
import QuerySelectionScene from '../scenes/QuerySelectionScene';
import EditQueryScene from '../scenes/EditQueryScene';
import ListResultsScene from '../scenes/ListResultsScene';
import MapResultsScene from '../scenes/MapResultsScene';

const style = StyleSheet.create({
        tabBarStyle: {
            borderTopWidth : .5,
            borderColor    : '#b7b7b7',
            backgroundColor: 'white',
            opacity: 1
        },
        padForNavBar: {
          paddingTop: 64
        }
});

const TabIcon = ({ selected, title }) => {
  return (
    <Text style={{color: selected ? 'red' :'black'}}>{title}</Text>
  );
}

const scenes = Actions.create(
  <Scene key="root">
    <Scene key="login" component={LoginScene} title="Login" sceneStyle={style.padForNavBar} />
    <Scene key="workspaceSelection" component={WorkspaceSelectionScene}
      title="Workspace Selection" sceneStyle={style.padForNavBar} />
    <Scene key="querySelection" component={QuerySelectionScene}
      title="Query Selection" sceneStyle={style.padForNavBar} />
    <Scene key="launch" component={LaunchScene} title="Launch" sceneStyle={style.padForNavBar} />
    <Scene key="editQuery" component={EditQueryScene} title="Edit Query" sceneStyle={style.padForNavBar} />
    <Scene key="results" title="Query Results"
        tabs={true} tabBarStyle={style.tabBarStyle}>
        <Scene
          key="listResultsTab"
          title="List"
          icon={TabIcon}
        >
          <Scene key="listResults" component={ListResultsScene} title="Results List" sceneStyle={style.padForNavBar} />
        </Scene>

        <Scene
          key="mapResultsTab"
          title="Map"
          icon={TabIcon}
        >
          <Scene key="mapResults" component={MapResultsScene} title="Results Map" sceneStyle={style.padForNavBar} />
        </Scene>
    </Scene>
  </Scene>
);

export default scenes

当我点击嵌套在结果场景中的listResults选项卡时,这就是我的选项卡的样子。请注意,我仍然可以返回上一页。 This is what my tabs look like when I hit the listResults tab nested inside the results scene. Note that I can still return to the previous pages.

但是当我将标签切换到mapResults标签时,仍在结果场景中,导航栏会重置。我无法再访问后退按钮了。切换回listResults将无法恢复它。 But when I switch tabs to the mapResults tab, still within the results scene, the navbar is reset. I no longer have access to the back button. Switching back to listResults will not restore it.

2 个答案:

答案 0 :(得分:1)

作为更新,结果证明这是库的问题。问题已经打开,并在随后的提交中得到纠正。

答案 1 :(得分:0)

我有一些东西给你哥们,把它添加到你的场景它会阻止你的状态重置。 type={ActionConst.REFRESH}

这将刷新您的堆栈,或者您可以执行此操作:

componentDidMount(){
Actions.refresh({backTitle: ()=> this.props.title})
}

你想从堆栈弹出的地方。

干杯:)