【问题标题】:How to add drawerIcon to a drawer navigator that contains a nested stack navigator?如何将drawerIcon添加到包含嵌套堆栈导航器的抽屉导航器?
【发布时间】:2019-12-13 21:00:59
【问题描述】:

我有一个堆栈导航器,然后嵌套在抽屉导航器中。我希望堆栈导航器中的每个路由都有一个图标,然后显示在抽屉菜单中。

我尝试使用 navigationOptions 在堆栈导航器中为每条路线提供一个抽屉图标,但这不起作用。

const StackNavigation = createStackNavigator(
  {
    Setting: {
      screen: SettingScreen,
      navigationOptions: {
        drawerIcon: ({ tintColor }) => <Feather name="settings" style={{ fontSize: 24, color: tintColor }} />,
      },
    },
    Home: {
      screen: HomeScreen,
      navigationOptions: {
        drawerIcon: ({ tintColor }) => <Feather name="home" style={{ fontSize: 24, color: tintColor }} />,
      },
    },
  },
  {
    initialRouteName: 'Home',
    headerMode: Platform.OS === 'android' ? 'screen' : 'float',
    defaultNavigationOptions: ({ navigation }) => ({
      headerLeft: <MenuButton navigation={navigation} />,
    }),
  }
);

const MainNavigation = createDrawerNavigator(
  {
    Home: {
      screen: StackNavigation,
    },
  },
  {
    contentComponent: CustomDrawerComponent,
  }
);

以这种方式尝试时不会应用任何图标。可能是因为堆栈导航器没有抽屉图标选项?但是我如何将它们分别应用于每条路线......

【问题讨论】:

    标签: react-native navigation-drawer react-native-navigation stack-navigator react-navigation-stack


    【解决方案1】:

    如果你有两条路径,

    import Icon from 'react-native-vector-icons/FontAwesome';
    ...
    const MainTab = createDrawerNavigator(
      {
        Home: {
          screen: HomeScreen
        },
        Setting: {
          screen: SettingScreen
        }
      },
      {
        defaultNavigationOptions: ({ navigation }) => ({
          drawerIcon: ({ focused, horizontal, tintColor, image }) => {
            const { routeName } = navigation.state;
            let iconName;
            if (routeName === "Home") {
              iconName = "home";
            } else if (routeName === "Setting") {
              iconName = "rocket";
            }
            return (
              <Icon
                name={iconName}
                size={horizontal ? 20 : 25}
              />
            );
          }
        })
      }
    
    

    【讨论】:

    • 1) 同样,这仅在抽屉菜单中为一条路线应用图标。我希望两个路线选项(设置和主页)都用自己的图标显示在抽屉导航中。 2)我的路线没有在抽屉导航器中明确定义,否则我不会有问题。相反,堆栈导航器嵌套在我的抽屉导航中。
    • 正如您再次查看我的代码所看到的,我将图标返回到我各自的路径。如果您喜欢我的代码,您可以在主屏幕和设置屏幕上获得图标。
    • 如果我不嵌套 stacknavigator,Ponleu 提供了一个更清洁的解决方案。但是,我正在寻找一种解决方案,允许我继续在我的抽屉导航中使用我的嵌套堆栈导航。
    • @PJately 如果您利用 Ponleu 的回答,您必须创建许多文件并生成代码。那是不必要的。无法用自己想要的方式解决的原因是无法从当前模块中读取栈的屏幕值。
    • 1) 您的解决方案没有使用嵌套的 StackNavigation。 2)如果我采用不嵌套stackNavigator的方法,那么Ponleu的答案将需要更少的代码并且更易于阅读。但是,我的抽屉导航中有一个嵌套的 stackNavigator,因此您的解决方案不适用于此。
    猜你喜欢
    • 2018-03-26
    • 1970-01-01
    • 1970-01-01
    • 2022-08-21
    • 2018-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-27
    相关资源
    最近更新 更多