我想知道如何将底部选项卡条隐藏在我的堆栈导航器中的特定屏幕中,该屏幕嵌套在物质底部选项卡栏上。
这是我的堆栈导航器的代码
import React from 'react';
import { createStackNavigator } from '@react-navigation/stack';
import PondScreen from '../screens/PondScreen/PondScreen';
import PondDetailScreen from '../screens/PondScreen/PondDetailScreen';
const Stack = createStackNavigator();
export function PondStack() {
return (
<Stack.Navigator
initialRouteName="PondScreen"
headerMode="none"
mode="card"
>
<Stack.Screen
name="PondScreen"
component={PondScreen}
/>
<Stack.Screen
name="PondDetailScreen"
component={PondDetailScreen}
options={{
tabBarVisible: false
}}
/>
</Stack.Navigator>
);
}这是我的材料底部标签导航器的代码。
import React from 'react';
import { View } from 'react-native';
import { createMaterialBottomTabNavigator } from '@react-navigation/material-bottom-tabs';
import { Entypo, Feather } from '@expo/vector-icons';
import { PondStack } from './StackNavigators';
import StockScreen from '../screens/StockScreen';
import OrderScreen from '../screens/OrderScreen';
import SettingsScreen from '../screens/SettingsScreen';
const Tab = createMaterialBottomTabNavigator();
export default function BottomTab() {
return (
<Tab.Navigator
labeled={false}
initialRouteName="Pond"
activeColor="#EB3349"
inactiveColor="#888888"
backBehavior="none"
shifting={true}
barStyle={{
backgroundColor: '#FFFFFF'
}}
>
<Tab.Screen
name="Pond"
component={PondStack}
options={{
tabBarIcon: ({ color}) => (
<View style={{ flex: 1 }}>
<Entypo name="air" color={color} size={20} />
</View>
)
}}
/>
<Tab.Screen
name="Stock"
component={StockScreen}
options={{
tabBarIcon: ({ color }) => (
<View style={{ flex: 1 }}>
<Feather name="box" color={color} size={20} />
</View>
)
}}
/>
<Tab.Screen
name="Order"
component={OrderScreen}
options={{
tabBarIcon: ({ color}) => (
<View style={{ flex: 1 }}>
<Feather name="dollar-sign" color={color} size={20} />
</View>
)
}}
/>
<Tab.Screen
name="Settings"
component={SettingsScreen}
options={{
tabBarIcon: ({ color}) => (
<View style={{ flex: 1 }}>
<Feather name="settings" color={color} size={20} />
</View>
)
}}
/>
</Tab.Navigator>
)
}我目前正在使用世博会来建设我的项目。
我的依赖关系(package.json)
{
"main": "node_modules/expo/AppEntry.js",
"scripts": {
"start": "expo start",
"android": "expo start --android",
"ios": "expo start --ios",
"web": "expo start --web",
"eject": "expo eject"
},
"dependencies": {
"@react-native-community/masked-view": "^0.1.5",
"@react-navigation/material-bottom-tabs": "^5.0.0",
"@react-navigation/native": "^5.0.0",
"@react-navigation/stack": "^5.0.0",
"@types/react-native": "^0.61.12",
"expo": "~36.0.0",
"react": "~16.9.0",
"react-dom": "~16.9.0",
"react-native": "https://github.com/expo/react-native/archive/sdk-36.0.0.tar.gz",
"react-native-gesture-handler": "~1.5.0",
"react-native-paper": "^3.6.0",
"react-native-raw-bottom-sheet": "^2.0.6",
"react-native-reanimated": "~1.4.0",
"react-native-safe-area-context": "0.6.0",
"react-native-screens": "2.0.0-alpha.12",
"react-native-vector-icons": "^6.6.0",
"react-native-web": "~0.11.7"
},
"devDependencies": {
"@babel/core": "^7.0.0",
"babel-preset-expo": "~8.0.0"
},
"private": true
}发布于 2020-03-26 13:17:13
作为父级的选项卡导航和作为childs的堆栈导航几乎都有相同的问题,重新安排屏幕层不是一种选择。因此,我寻找了另一个解决方案,从文档中我发现父导航UI总是显示在子导航界面上。但是,文档也给出了一个很好的例子,说明如何从子节点中更改父标头。因此,我以这个例子为例,并将其实现为选项卡的可见性。我就是这样实现的。
所以我有一个带有Home、Contact和更多的选项卡导航,在每个选项卡中我都有一个堆栈。我隐藏选项卡的屏幕在CameraView中,该屏幕是More选项卡中的堆栈屏幕。
Tabnavigation:
如您所见,我从一个方法中获得了该选项卡的可见性。
<NavigationContainer>
<Tab.Navigator>
<Tab.Screen name="Home" component={HomeNavigation} />
<Tab.Screen name="Contacts" component={ContactNavigation} />
<Tab.Screen
name="More"
component={MoreNavigation}
options={({ route }) => ({
tabBarVisible: this.getTabBarVisibility(route)
})}
/>
</Tab.Navigator>
</NavigationContainer>方法getTabBarVisibility:
这就是我检查路由的名称是否是CameraView,这是我在StackNavigation中定义的。
getTabBarVisibility = (route) => {
const routeName = route.state
? route.state.routes[route.state.index].name
: '';
if (routeName === 'CameraView') {
return false;
}
return true;
}和组件MoreNavigation:
这是我的堆栈导航,在这里您可以看到屏幕名是CameraView。
<Stack.Navigator initialRouteName="More">
<Stack.Screen name="More" component={More}/>
<Stack.Screen name="UserProfile" component={Profile}/>
<Stack.Screen name="CameraView" component={CameraView}/>
</Stack.Navigator>发布于 2020-02-12 04:43:52
你应该尝试重新排列你的屏幕层,
原创
- Stock
- Others
相反,尝试将顶部堆栈设置为
- Details
应该能够在每个屏幕中隐藏底部的选项卡栏或选项卡标题。
发布于 2020-11-20 15:39:34
接受的答案是很好的,但您可能希望内联地这样做,并使用getFocusedRouteNameFromRoute来确保安全。此代码与已接受的答案相同:
<Tabs.Screen
name="Home"
component={HomeStack}
options={({ route }) => ({
tabBarVisible: ((route) => {
const routeName = getFocusedRouteNameFromRoute(route) ?? ""
if (routeName === "CameraView") {
return false
}
return true
})(route),
})}
/>https://stackoverflow.com/questions/60177053
复制相似问题