在 BottomTabBar 屏幕中将本机导航反应到外部选项卡

React Native Navigation To External Tab Within BottomTabBar Screen

我有一个问题,我不知道如何从底部标签栏中的屏幕导航,如下所示:

default: createBottomTabNavigator(
      {
        Home: {
          screen: HomeScreen,
          navigationOptions: {
            tabBarIcon: ({ tintColor }) => <Ionicons name="ios-home" size={24} color={tintColor} />
          }
        },
        Message: {
          screen: MessageScreen,
          navigationOptions: {
            tabBarIcon: ({ tintColor }) => <Ionicons name="ios-chatboxes" size={24} color={tintColor} />,
            OtherUser: { screen: OtherUserScreen }
          }
        },
        Post: {
          screen: PostScreen,
          navigationOptions: {
            tabBarIcon: ({ tintColor }) => <Ionicons name="ios-add-circle" size={48} color={"#4cdd75"} style={{
              shadowColor: "#4cdd75",
              shadowOffset: {
                width: 0,
                height: 0
              },
              shadowRadius: 10,
              shadowOpacity: 0.3
            }} />
          }
        },
        Notification: {
          screen: NotificationScreen,
          navigationOptions: {
            tabBarIcon: ({ tintColor }) => <Ionicons name="ios-notifications" size={24} color={tintColor} />
          }
        },
        Profile: {
          screen: ProfileScreen,
          navigationOptions: {
            tabBarIcon: ({ tintColor }) => <Ionicons name="ios-person" size={24} color={tintColor} />
          }
        }
      }

createSwitchNavigator 组件如下所示:

export default createAppContainer(
  createSwitchNavigator(
    {
      Loading: LoadingScreen,
      App: AppContainer,
      Auth: AuthStack,
      OtherUser: OtherUserScreen
    },
    {
      initialRouteName: 'Loading'
    }
  )
);

AppContainer 是底部选项卡导航器屏幕设置。 此外,我在消息屏幕中的导航如下所示:

const { navigate } = this.props.navigation;
...
onPress={() => navigate('OtherUser')}

我想从这个消息屏幕导航到 OtherUser 屏幕,以便仍然显示底部的选项卡导航器。目前,导航导航到 OtherUser 屏幕,但底部选项卡导航器消失了。当我尝试在我的 OtherUser 屏幕中使用后退按钮代码导航时,如下所示:

onPress={() => navigate("MessageScreen")}

未显示任何内容。在不删除底部标签栏并且不向其添加其他组件的情况下,是否有可能以任何方式从消息屏幕无缝导航到其他用户屏幕?

据我所知,您的尝试是错误的。 bottomBar 消失是有道理的,因为您使用 SwitchNavigator 在 "AppContainer" 和 "OtherUser" 之间导航。

因此当您导航至 "OtherUser" 时,您不再处于 bottomMenu 导航中,您只是处于 SwitchNavigator 中!

为了能够做你想做的事,你应该集成一个stackNavigator而不是MessageScreen, 然后在这个 StackNavigator 中,集成 MessageScreen 和 OtherUser

目前你的导航是这样的:


- Loading
- App
  -- bottomTabMenu
     -- Home
     -- Message
     -- Posts
     -- Notifications
     -- Profile
- Auth
- OtherUser

因此,正如您所见,当您转到 "OtherUser" 时,您不再处于 BottomMenu 导航中,除此之外,您无法返回,因为实际上,可以使用后退按钮返回,您需要在堆栈导航中。

因此,如果您希望能够从您的 messageScreen 转到用户个人资料,您需要将其包装在导航堆栈中,并将该堆栈集成到您的 bottomMenu 中。

您的导航应该如下所示:


- Loading
- App
  -- bottomTabMenu
     -- Home
     -- Message
        -- Stack Navigation
           -- Message Screen (defaultRoute)
           -- OtherUser Screen
     -- Posts
     -- Notifications
     -- Profile
- Auth

所以你的代码将是这样的:

const MessageStack = createStackNavigator(
      {
           Message: MessageScreen,
           OtherUser: OtherUserScreen
      },
      {
           initialRouteName: "Message"
      }
)

default: createBottomTabNavigator(
      {
        ...
        Message: {
          screen: MessageStack,
          navigationOptions: {
            tabBarIcon: ({ tintColor }) => <Ionicons name="ios-chatboxes" size={24} color={tintColor} />,
            OtherUser: { screen: OtherUserScreen } //Delete this line, the navigationOptions are only used to define styles or behaviors on the navigation.
          }
        },
        ...
      }

我希望我理解了这个问题,希望这个答案对您有所帮助!

维克多