【问题标题】:ReactNative:How to change the header for tab navigator inside a drawer navigatorReact Native:如何在抽屉导航器中更改选项卡导航器的标题
【发布时间】:2018-01-15 01:41:07
【问题描述】:

我正在构建一个带有登录和个人资料屏幕的 React Native 应用程序。导航如下: 当我导航到每个选项卡时,我想更改标题标题。另外,我希望我的抽屉能够从任何屏幕打开。所以抽屉图标应该始终位于左侧的配置文件中。 我不能让标题在个人资料屏幕中不显示/隐藏,因为它也会隐藏抽屉图标。知道如何解决吗?

const TabStack = TabNavigator(
  {
    Home: {
      screen: Home
    },
    Settings: {
      screen: SettingsTab
    }
  }
);

const DrawerMain = DrawerNavigator(
  {
    TabStack: {
      screen: TabStack
    }
  },
  {
    drawerOpenRoute: "DrawerOpen",
    drawerCloseRoute: "DrawerClose"
);
const Profile = StackNavigator(
  {
    DrawerMain: {
      screen: DrawerMain   
  }
},
{
    headerMode: "screen",
    navigationOptions: ({ navigation }) => ({
      headerStyle: {
        backgroundColor: "white"
      },
      headerLeft: (
        <TouchableOpacity
          onPress={() => {
            if (navigation.state.index === 0) {
              navigation.navigate("DrawerOpen");
            } else {
              navigation.navigate("DrawerClose");
            }
          }}
        >
          <Icon name={"ios-menu"} size={20} style={{ color: "red" }} />
        </TouchableOpacity>
      )
    })
  }
);
export default (App = StackNavigator({
  Login: {
    screen: Login
  },
  Profile: {
    screen: Profile,
  }
}));

This is how the profile should look like.

【问题讨论】:

    标签: reactjs react-native react-navigation


    【解决方案1】:

    首先,将您的导航层次结构更改为这样。

    抽屉

    ㄴ堆栈

    __ ㄴ标签

    然后,您需要将 DrawerNavigator 的导航传递给 StackNavigator,以通过 StackNavigator 中的按钮控制抽屉。

    并通过screenProps使用它。

    ...
    
    const Profile = StackNavigator(
      {
        TabStack: {
          screen: TabStack   
      }
    },
    navigationOptions: ({ screenProps }) => ({
          ...
          headerLeft: (
            <TouchableOpacity
              onPress={() => {
                  screenProps.myDrawerNavigation.navigate("DrawerOpen");
              }}
            >
              <Icon name={"ios-menu"} size={20} style={{ color: "red" }} />
            </TouchableOpacity>
          )
    ...
    
    
    const DrawerMain = DrawerNavigator(
      {
        Profile: {
          screen: ({navigation}) => <Profile screenProps={{myDrawerNavigation:navigation}}/>
        }
      },
      ...
    

    【讨论】:

    • 我尝试使用此过程。但是从屏幕访问抽屉图标时出现以下错误。 “未定义不是对象。评估(navigation.screenProps.myDrawerNavigation.navigate(“DrawerOpen”);。我是新来的反应。我有什么遗漏吗?
    • @SnehaS 哎呀,对不起。我从navigation.screenProps 编辑了我对screenProps. 的回答。我为你做了一个工作样本。这里。 snack.expo.io/rJIKh61Sf
    • 但是,正如我所说,我无法为配置文件中的不同选项卡添加不同的标题。如果我在主导航器中隐藏标题并在每个导航页面中分别添加标题,则隐藏抽屉菜单以及附加
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-25
    • 2020-03-14
    • 1970-01-01
    相关资源
    最近更新 更多