react-native - 如何同时使用抽屉导航器和标签导航器?
问题描述
这是我的标签导航器:
<Tab.Navigator initialRouteName="Home" backBehavior="initialRoute">
<Tab.Screen
name="Science"
component={Science}
options={{
tabBarLabel: 'Science',
tabBarIcon: ({color, size}) => (
<Image source={require('../../assets/images/science-tab.png')} />
),
}}
/>
<Tab.Screen name="Dashboard" component={Dashboard} />
</Tab.Navigator>
这是抽屉导航器:
<Drawer.Navigator initialRouteName="Home">
<Drawer.Screen name="Home" component={HomeScreen} />
<Drawer.Screen name="Notifications" component={NotificationsScreen} />
</Drawer.Navigator>
这是我的根导航器:底部导航下方是选项卡导航器。
<NavigationContainer>
<Stack.Navigator>
<Stack.Screen
name="BottomNavigation"
component={BottomNavigation}
options={{title: this.createTitle()}}
/>
</Stack.Navigator>
</NavigationContainer>
解决方案
我建议你制作TabNavigator
一个屏幕DrawerNavigator
你可以这样做:
function TabNavigator({navigation}) {
return (
<Tab.Navigator>
// Your tab screens
</Tab.Navigator>
);
}
function DrawerNavigator() {
return (
<Drawer.Navigator>
<Drawer.Screen name="TabNavigator" component={TabNavigator} />
</Drawer.Navigator>
);
}
const App = () => {
return (
<NavigationContainer>
<Stack.Navigator>
<Stack.Screen name="DrawerNavigator" component={DrawerNavigator} />
</Stack.Navigator>
</NavigationContainer>
);
};
如果你想打开你的抽屉,你可以调用navigation.openDrawer()
你的TabNavigator
.
更新以解决标签问题
您可以创建一个抽屉内容组件来覆盖将DrawerNavigator
屏幕标签添加为抽屉内容的默认行为。
function CustomDrawerContent(props) {
return (
<DrawerContentScrollView {...props}>
<DrawerItem
label="Home"
onPress={() => props.navigation.navigate('Home')}
/>
// ...
</DrawerContentScrollView>
);
}
然后您需要将其更改DrawerNavigator
为:
function DrawerNavigator({route}) {
return (
<Drawer.Navigator
drawerContent={(props) => <CustomDrawerContent {...props} />}>
<Drawer.Screen name="TabNavigator" component={TabNavigator} />
<Drawer.Screen name="Home" component={Home} />
</Drawer.Navigator>
);
}
因此,您可以将新屏幕添加到 DrawerNavigator 并使用DrawerItem
onPress 函数导航到它们。
当然要确保 importDrawerContentScrollView
和DrawerItemList
from DrawerItem
。@react-navigation/drawer
有关更多信息,请查看:https ://reactnavigation.org/docs/drawer-navigator/#providing-a-custom-drawercontent 。
推荐阅读
- node.js - 如何编写原生 Nodejs 异步 https 请求代码
- html - HTML 电子邮件 - 发送到 Outlook 的问题
- asp.net-mvc - 如何使用带有点分隔名称的 JSON.Net CamelCasePropertyNamesContractResolver?
- angular - ngrx:为实体设置默认值
- jenkins - jenkins 升级后 TFS 插件出错
- maven-plugin - 通过 maven 执行 java -jar name.jar -p myproject
- java - 测试依赖项调用的 lambda 表达式
- selenium - 获取 XHR 响应(网络流量)并在 Katalon Studio 中解析
- ios - 如何从 Swift 中的输入音频文件生成相位反转音频文件?
- python-3.x - cv2 - 用噪声掩盖图像