【发布时间】:2020-12-16 17:12:09
【问题描述】:
我是 react native 的新手,我遇到了 react 导航问题,基本上我想在所有屏幕中同时使用底部选项卡和抽屉菜单,但是按照一些示例和教程,我没有得到我想要的。我希望抽屉菜单和底部选项卡出现在 Twitter 等所有屏幕中,侧边栏的每个屏幕都有底部选项卡,并且选项卡中的活动图标始终是主页图标。我尝试将底部选项卡组件放在抽屉内,但其他屏幕,如个人资料、日历、帐户设置(...),没有底部选项卡。
我的代码:
const Tabs = createBottomTabNavigator();
const Drawer = createDrawerNavigator();
const FeedStack = createStackNavigator();
const AppStack = createStackNavigator();
const FeedStackScreen = () => (
<FeedStack.Navigator screenOptions={{ headerShown: false }}>
<FeedStack.Screen name='Feed' component={FeedScreen} />
<FeedStack.Screen name='AddEvent' component={AddEventScreen} />
<FeedStack.Screen name='Event' component={EventScreen} />
</FeedStack.Navigator>
);
const TabsScreen = () => (
<Tabs.Navigator
screenOptions={{ headerShown: false }}
tabBarOptions={{ showLabel: false }}
screenOptions={({ route }) => ({
tabBarIcon: ({ focused, color }) => {
let iconName;
if (route.name === 'Feed') {
iconName = focused ? 'home' : 'home';
color = focused ? '#1ba8cf' : '#666666';
} else if (route.name === 'Notifications') {
iconName = focused ? 'bell' : 'bell';
color = focused ? '#1ba8cf' : '#666666';
}
return (
<FontAwesomeIcon
icon={iconName}
size={20}
color={color}
style={{ textAlignVertical: 'center' }}
/>
);
}
})}
>
<Tabs.Screen name='Feed' component={FeedStackScreen} />
<Tabs.Screen name='Notifications' component={NotificationsScreen} />
</Tabs.Navigator>
);
const EventsCalendarStackScreen = () => (
<EventsCalendarStack.Navigator screenOptions={{ headerShown: false }}>
<EventsCalendarStack.Screen
name='EventsCalendar'
component={EventsCalendarScreen}
/>
</EventsCalendarStack.Navigator>
);
const DrawerNavigatior = () => (
<Drawer.Navigator
drawerPosition='right'
screenOptions={{ headerShown: false }}
initialRouteName='Feed'
drawerContent={(props) => Sidebar(props)}
>
<Drawer.Screen
name='EventsCalendar'
component={EventsCalendarStackScreen}
options={{ title: 'Calendário' }}
/>
<Drawer.Screen
name='Configurations'
component={ConfigurationsScreen}
options={{ title: 'Configurações' }}
/>
<Drawer.Screen
name='About'
component={AboutScreen}
options={{ title: 'Descobre quem somos' }}
/>
<Drawer.Screen
name='Team'
component={TeamScreen}
options={{ title: 'Conhece a Equipa' }}
/>
<Drawer.Screen
name='Contact'
component={ContactScreen}
options={{ title: 'Contacto' }}
/>
<Drawer.Screen
name='Terms'
component={TermsScreen}
options={{ title: 'Termos' }}
/>
<Drawer.Screen
name='Policy'
component={PolicyScreen}
options={{ title: 'Política de Privacidade' }}
/>
</Drawer.Navigator>
);
return (
<MenuProvider>
<NavigationContainer>
<AppStack.Navigator screenOptions={{ headerShown: false }}>
<AppStack.Screen name='Drawer' component={DrawerNavigatior} />
</AppStack.Navigator>
</NavigationContainer>
</MenuProvider>
);
有人可以帮帮我吗?谢谢
【问题讨论】:
-
让标签成为抽屉的屏幕是个好主意。例如,如果您想查看日历屏幕上的选项卡,您可以将它们放在作为选项卡屏幕的堆栈导航器中。
标签: react-native react-navigation