Как добавить компоненты выше createMaterialTopTabNavigator?
Ниже мой createMaterialTopTabNavigator
<Tab.Navigator
lazy={true}
tabBarOptions={{
activeTintColor: "#9e39ff",
inactiveTintColor: "#4b5358",
showLabel: true,
showIcon: true,
tabStyle: {
flexDirection: "row",
},
}}
>
<Tab.Screen
name={CHAT_MATCH_SCREEN}
component={ChatMatchScreen}
options={{
tabBarIcon: ({ focused }) => (
<Image
source={focused ? MATCHES_SELECTED_ICON : MATCHES_UNSELECTED_ICON}
/>
),
}}
/>....
Теперь мне нужно добавить текст, кнопку выше createMaterialTopTabNavigator
и после этого покажите createMaterialTopTabNavigator
.
Я пробовал добавить createMaterialTopTabNavigator
компонент на моем собственном экране, но его не видно. Я также попытался добавить компоненты вышеTab.Navigator
но они не будут работать
3 ответа
Мне пришлось завернуть Tab Navigator
и пользовательские компоненты внутри React.Fragment
Итак, мой код выглядит примерно так
<>
<MyCustomView>
</MyCustomView>
<Tab.Navigator>
</Tab.Navigator>
</>
Обертывание всего этого внутри View
или SafeAreaView
у меня не работает
Оберните свои вкладки родительским представлением
Я поделился фрагментом рабочего кода.
Используйте это как NavigationContainer
<NavigationContainer ref={'navigation'}>
<Stack.Navigator initialRouteName={initialRoute}>
<Stack.Screen
name='Auth'
component={AuthModule}
options={{ headerShown: false }}
/>
</Stack.Navigator>
</NavigationContainer>
и ваша реализация вкладок будет такой.
<View
style={{
flex: 1,
backgroundColor: APP_COLORS.COLOR_BACKGROUND,
flexDirection: 'column',
}}
>
<View>
<Text style={{ textAlign: 'center' }}>Top Text on Tabs</Text>
</View>
<Tab.Navigator
initialRouteName={initialRouteName}
tabBarOptions={{
inactiveTintColor: APP_COLORS.COLOR_666666,
activeTintColor: APP_COLORS.COLOR_BLACK,
style: {
backgroundColor: 'white',
marginTop: 0,
marginBottom: 0,
height: 40,
},
indicatorStyle: {
height: 3,
backgroundColor: APP_COLORS.COLOR_THEME,
},
labelStyle: {
fontFamily: 'MuseoSans700',
lineHeight: 16,
...getFlipForRTLStyle(),
},
}}
>
<Tab.Screen
name='Login'
component={() => (
<Login calbacks={this.props.CallBacks} data={this.props.data} />
)}
options={{
title: 'Signin',
}}
/>
<Tab.Screen
name='Register'
component={() => (
<Register
calbacks={this.props.CallBacks}
data={this.props.data}
/>
)}
options={{ title: 'Register' }}
/>
</Tab.Navigator>
</View>
Вы можете создать отдельный файл для панели вкладок, а затем импортировать этот файл (файл панели вкладок) на главный экран.
export default class Main extends Component {
render() {
return (
<View>
<Customcomponent />{/* custom component */}
<Tabbar />{/* Tabbar component */}
</View>
)
}}
В простоте
если у вас есть только одна tabBar в вашем приложении, поместите ваш Component поверх TopTabNavigation, но оба они должны находиться внутри NavigationContainer, как показано ниже
`import { createMaterialTopTabNavigator } из '@response-navigation/material- top-tabs'; импортировать { NavigationContainer } из "@response-navigation / native";
const Tab = createMaterialTopTabNavigator ();
function MyTabs () {return (
); } `Второй сценарий: у вас есть эта навигация внутри другой навигации, отчасти это внутренняя навигация / вложенная навигация, все, что вам нужно сделать в приведенном выше коде, - это добавить
independent={true}
как опора на вашемNavigationContainer
иначе вы получите сообщение об ошибке вложенного NavigationContainer
коды будут такими, как показано ниже:
`import { createMaterialTopTabNavigator } from '@react-navigation/material-top-tabs';
import { NavigationContainer } from "@react-navigation/native";
const Tab = createMaterialTopTabNavigator();
function MyTabs() {
return (
<NavigationContainer independent={true}>
**<YourComponent />**
<Tab.Navigator>
<Tab.Screen name="Home" component={HomeScreen} />
<Tab.Screen name="Settings" component={SettingsScreen} />
</Tab.Navigator>
</NavigationContainer>
);
}`