TL; DR :我需要这个结果(下面列出了DrawerNavigator和StackNavigator导航):
我有这种屏幕结构:
在根页面(由“•”表示)中,我需要使用 DrawerNavigator 进行导航,而子页面(由“ | _”表示)需要与 StackNavigator 。
这是我想要得到的行为:
• Account
|_ Create Account
|_ Login
|_ Forget Password
• Products
|_ Product detail
|_ Ingredients
• Configuration
• About
• Cart
|_ Checkout
|_ Finish Checkout
抽屉: MainDrawer ,带有=> createDrawerNavigator()
• Account
• Products
• Configuration
• About
• Cart
SwitchNavigator :
Start: StartCheck, // Screen component
App: MainDrawer, // Drawer
Welcome: WelcomeScreen, // Screen component
组件: StartCheck 和 WelcomeScreen 是<Component />
StartCheck:这只是检查AsyncStorage上是否有数据,例如 “ isFirstRun”,然后根据以下内容打开 WelcomeScreen 或 MainDrawer 结果 [like this documentation]。
屏幕:
const Screens = {
account: {
screen: AccountScreen,
path: 'account'
},
products: {
screen: ProductsScrren,
path: 'products'
},
configuration: {
screen: ConfigurationScrren,
path: 'configuration'
},
about: {
screen: AboutScrren,
path: 'about'
},
cart: {
screen: CartScrren,
path: 'cart'
},
};
MainDrawer:
const MainDrawer = createDrawerNavigator({
...Screens
}, {
contentComponent: Sidebar,
initialRouteName: 'products',
});
带有SwitchNavigator的应用容器:
const AppContainer = createAppContainer(createSwitchNavigator(
{
StartCheck: StartCheck, // Component
App: MainDrawer, // Drawer
Welcome: WelcomeScreen, // Component
},
{
initialRouteName: 'StartCheck',
}
));
export default AppContainer;
使用此代码,不会出现 Header ,因此我将DrawerNavigator放在StackNavigator中:
MainStack:
const MainStack = createStackNavigator({
MainDrawer
});
然后我用SwitchNavigator修改应用容器:
const AppContainer = createAppContainer(createSwitchNavigator(
{
StartCheck: StartCheck, // Component
App: MainStack, // Stack
Welcome: WelcomeScreen, // Component
},
{
initialRouteName: 'StartCheck',
}
));
export default AppContainer;
但是通过这种方式,标题会重叠侧边栏,并且如果我使用headerMode: 'none'
,我的标题也会从其他屏幕上消失(不仅仅是容器)。>
我需要这个结果(使用上面的DrawerNavigator和StackNavigator导航列表):
而且我也不知道可以在哪里放置辅助屏幕(使用StackNavigator的导航方法打开)。
对不起,我一直在寻找尽可能多的细节,因为我一直在寻找解决方案,但是我没有找到...
答案 0 :(得分:1)
我将首先以文字形式描述我的想法:
完成“开始”屏幕后,您将进入抽屉导航器,即您的根节点
完全显示标题
所有StackNavigator都附带标头///,用于在堆栈内渲染的屏幕。
对于诸如About屏幕之类的纯组件,您可以创建一个自定义标题并将其手动添加到这些组件中。
或“从我的角度来看不推荐”
在堆栈导航器中呈现每个纯屏幕(如“关于”屏幕)只是为了节省您创建自定义标题的时间。
const MainDrawer = createDrawerNavigator({
Account: AccountStack,
Product: ProductsStack,
Configuration: ConfigScreen, // Pure Component
About: AboutScreen, // Pure Component
Cart: CartStack
});
// Ex stack:
const AccountStack = createStackNavigator({
CreateAcount: SignUpScreen,
Login: LoginScreen,
ForgotPassword: ForgotPasswordScreen
});
答案 1 :(得分:0)
像这样定义您的createSwitchNavigator
const AppContainer = createAppContainer(createSwitchNavigator(
{
StartCheck: StartCheck, // Component
App: MainStack, // Stack
Welcome: WelcomeScreen, // Component
},
{
initialRouteName: 'StartCheck',
headerMode: 'none',
}
));