Чтобы элементы в TabBar на Expo и React Native выравнивались по центру, нужно правильно настроить стили вкладок в React Navigation. В частности, вы можете использовать кастомный компонент для отображения вашей нижней навигации и применить к нему нужные стили.
Вот пример, как это можно сделать.
### Шаг 1: Установка необходимых пакетов
Убедитесь, что у вас установлены все необходимые пакеты для навигации:
```bash
npm install @react-navigation/native @react-navigation/bottom-tabs
npm install react-native-gesture-handler react-native-reanimated react-native-screens react-native-safe-area-context @react-native-community/masked-view
```
### Шаг 2: Настройка навигации
Создайте ваш `TabNavigator` и кастомный компонент для TabBar. Пример:
```jsx
import React from 'react';
import { View, Text, StyleSheet } from 'react-native';
import { NavigationContainer } from '@react-navigation/native';
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
const Tab = createBottomTabNavigator();
function HomeScreen() {
return (
<View style={styles.container}>
<Text>Home Screen</Text>
</View>
);
}
function SettingsScreen() {
return (
<View style={styles.container}>
<Text>Settings Screen</Text>
</View>
);
}
// Кастомный компонент для TabBar
const CustomTabBar = ({ state, descriptors, navigation }) => {
return (
<View style={styles.tabBar}>
{state.routes.map((route, index) => {
const { options } = descriptors[route.key];
const isFocused = state.index === index;
const onPress = () => {
const event = navigation.emit({
type: 'tabpress',
target: route.key,
canPreventDefault: true,
});
if (!isFocused && !event.defaultPrevented) {
navigation.navigate(route.name);
}
};
return (
<View key={index} style={styles.tabItem}>
<Text onPress={onPress} style={{ color: isFocused ? '#673ab7' : '#222' }}>
{options.tabBarLabel !== undefined ? options.tabBarLabel : options.title}
</Text>
</View>
);
})}
</View>
);
};
export default function App() {
return (
<NavigationContainer>
<Tab.Navigator tabBar={props => <CustomTabBar {...props} />}>
<Tab.Screen name="Home" component={HomeScreen} />
<Tab.Screen name="Settings" component={SettingsScreen} />
</Tab.Navigator>
</NavigationContainer>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
alignItems: 'center',
justifyContent: 'center',
},
tabBar: {
flexDirection: 'row',
justifyContent: 'space-around',
alignItems: 'center',
height: 60,
backgroundColor: '#fff',
elevation: 2, // или используйте shadow для iOS
},
tabItem: {
flex: 1,
alignItems: 'center',
justifyContent: 'center',
},
});
```
### Шаг 3: Настройка стилей
В приведенном примере свойства стилей в `tabBar` обеспечивают, что элементы вкладок выравниваются по центру за счет `flexDirection: 'row'`, `justifyContent: 'space-around'`, и `alignItems: 'center'`. Убедитесь, что высота вашего `tabBar` задана в 60 пикселей (или любое другое значение, которое вам нужно).
### Заключение
Таким образом, вы можете создать кастомный TabBar в React Navigation, позволяя вам контролировать стили и выравнивание элементов. Не забудьте изменить стили в соответствии с вашими требованиями, чтобы получать нужный вам вид.