React Native-为模式屏幕制作第二个标签栏导航器

问题描述 投票:0回答:1

[在React Native上构建一个相对简单的应用程序,我目前有一个tabBarNavigator,其中选项卡栏上的图标之一打开了一个弹出模式。然后,我尝试在模式底部创建另一个单独的选项卡栏。

然而,尽管我在根目录tabBarNavigator中创建了一个appContainerApp.js并导出了该容器(将其传递给我的模态组件),但是模态然后加载了基础堆栈,而不是我创建的模态堆栈-显然不是所希望的行为!

App.js的相关部分:

const ModalNavigator = createBottomTabNavigator({
        Photo: { screen: PrivacySettings,
                navigationOptions: {
                  headerMode: false,
                  tabBarIcon: ({ tintColor }) => <Feather name="camera" size={24} color="black" />
                 }
              },
        Camera: { screen: HelpSettings,
                  navigationOptions: {
                    headerMode: false,
                    tabBarIcon: ({ tintColor }) => <Feather name="type" size={24} color="black" />
                }
             },
        Text: { screen: ContactUs,
                 navigationOptions: {
                   headerMode: false,
                   tabBarIcon: ({ tintColor }) => <Feather name="type" size={24} color="black" />
               }
           }
       });

export const ModalContainer = createAppContainer(ModalNavigator);

const AppContainer = createStackNavigator({
    default: createBottomTabNavigator({
  Home: { screen: Home,
          navigationOptions: {
            headerMode: false,
            tabBarIcon: ({ tintColor }) => <FontAwesomeIcon size={30} icon={faHome} color={tintColor}/>
           }
        },
  Search: { screen: Contacts,
            navigationOptions: {
              headerMode: false,
              tabBarIcon: ({ tintColor }) => <FontAwesomeIcon size={30} icon={faSearch} color={tintColor}/>
           }
        },
  AddPhoto: { screen: () => null,
              navigationOptions: {
                headerTitle: "Upload Photo",
                tabBarIcon: <AddPhotoButton/>,
                headerMode: 'none',
           }
        },
  Likes: {screen: Vault,
          navigationOptions: {
            headerMode: false,
            tabBarIcon: ({ tintColor }) => <FontAwesomeIcon size={30} icon={faHeart} color={tintColor}/>
           }
        },
  Settings: {screen: Me,
             navigationOptions: {
               headerMode: false,
               tabBarIcon: ({ tintColor }) => <FontAwesomeIcon size={30} icon={faUser} color={tintColor}/>
             }
           }
       },
  {
    defaultNavigationOptions: {
        tabBarOnPress: ({ navigation, defaultHandler }) => {
              if (navigation.state.key === 'AddPhoto') {
                  navigation.navigate('addPhotoModal')
              } else {
                  defaultHandler()
              }
          },
            cardStyle: {
                    backgroundColor: "transparent",
                    opacity: 1
                }
        },
    tabBarOptions: {
      showLabel: false,
      activeTintColor: '#1A86CB',
      inactiveTintColor: 'black'
    },
    initialRouteName: "Home",
}),
  addPhotoModal: {
      screen: AddPhotoModal }
    }, {
        mode: 'modal',
        headerMode: 'none',
        transparentCard: true,
}
)

const Routes = createStackNavigator({

  Home: { screen: AppContainer,
          navigationOptions: {
            headerShown: false }
        },
  SignIn: { screen: SignIn },
  AddContact: { screen: AddContact,
                navigationOptions: {
                  headerTitle: "Add Contact" }
        },
  ContactDetails: {screen: ContactDetails },
  PrivacySettings: {screen: PrivacySettings,
                    navigationOptions: {
                      headerTitle: "Privacy",
                      headerStyle: {
                          backgroundColor: 'white',
                          shadowColor: 'transparent'
                      }}
        },
  NotificationSettings: {screen: NotificationSettings,
                    navigationOptions: {
                      headerTitle: "Notifications",
                      headerStyle: {
                          backgroundColor: 'white',
                          shadowColor: 'transparent'
                      }}
        },
  HelpSettings: {screen: HelpSettings,
                    navigationOptions: {
                      headerTitle: "Help",
                      headerStyle: {
                          backgroundColor: 'white',
                          shadowColor: 'transparent'
                      }}
        },
  InviteSettings: {screen: InviteSettings,
                    navigationOptions: {
                      headerTitle: "Invite Friends",
                      headerStyle: {
                          backgroundColor: 'white',
                          shadowColor: 'transparent'
                      }}
        },
  ContactUs: {screen: ContactUs,
                    navigationOptions: {
                      headerTitle: "Contact Us",
                      headerStyle: {
                          backgroundColor: 'white',
                          shadowColor: 'transparent'
                      }}
        },
},
  { initialRouteName: "Home",
});

const AuthStack = createStackNavigator({
    Login: SignIn,
})


export default createAppContainer(
  createSwitchNavigator(
    {
      Loading: LoadingScreen,
      App: Routes,
      Auth: AuthStack
    },
    {
      initalRouteName: LoadingScreen
    }
  )
)

模态分量的相关部分:

import ModalContainer from '../../App'

export default class AddPhotoModal extends React.Component {

    render() {
        return(
                  <View style={{backgroundColor:"#000000CC", flex:1}}>
                    <View style={{ backgroundColor:"#ffffff", marginLeft: 0, marginRight: 0, marginTop: 240, padding: 20, borderRadius: 20, flex: 1, }}>
                        <View style={styles.header}>
                            <TouchableOpacity style={{position: 'absolute'}} onPress={() => this.props.navigation.goBack()}>
                                <Text style={styles.buttonFont}>Back</Text>
                            </TouchableOpacity>

                            <TouchableOpacity style={{position: 'absolute', right: 0}} onPress={() => this.props.navigation.navigate('UploadScreen')}>
                                <Text style={styles.buttonFont}>Continue</Text>
                            </TouchableOpacity>
                        </View>
                            <ModalContainer/>
                    </View>
                 </View>
        );
    }
}
react-native react-navigation
1个回答
0
投票

'ModalContainer'不是'Routes'的一部分,因此SwitchNavigator不知道。

将ModalContainer添加为“路由”堆栈的一部分。要显示ModalContainer bottomTab,请单击tabIcon导航到ModalContainer

© www.soinside.com 2019 - 2024. All rights reserved.