如何在 React Native 中垂直居中标签栏内的标签
How to vertically centre tabs inside tab bar in react native
我使用来自 https://reactnavigation.org/docs/en/bottom-tab-navigator.html
的 createBottomTabNavigator
在 React Native 中创建了一个导航器
我遇到的问题是我找不到将选项卡在选项卡栏内垂直居中的方法。
正如您在 screenshot 中看到的那样,选项卡底部始终有蓝色区域。即使我手动设置选项卡的高度,它们也会向上增长。如果我给标签栏设置flex:1
,它占了一半的屏幕,但蓝色区域仍然存在。
tabBar: {
backgroundColor: 'blue',
borderWidth: 2,
height: 32,
justifyContent: 'center',
alignItems: 'center',
padding: 0
},
labelStyle: {
backgroundColor: 'green',
},
tabStyle: {
backgroundColor: 'yellow',
flex: 1,
justifyContent: 'center',
alignItems: 'center',
alignSelf: 'center',
borderWidth: 1,
borderColor: 'black',
marginBottom: 0,
paddingBottom: 0,
},
这就是我创建导航栏的方式(为简单起见,我删除了图标):
const TabNavigator = createBottomTabNavigator(
{
screen1: { screen: screen1 },
screen2: { screen: screen2 },
screen3: { screen: screen3 },
screen4: { screen: screen4 },
},
{
tabBarOptions: {
style: styles.tabBar,
labelStyle: styles.labelStyle,
tabStyle: styles.tabStyle
},
}
);
const App = createAppContainer(TabNavigator);
export default () => {
return (
<SafeAreaView style={{ flex: 1, backgroundColor: 'red' }}>
<App />
</SafeAreaView>
);
};
我认为您应该将标签栏包裹在视图中并在其中添加 justifyContent
我自己找到了解决方案,并将其分享给有同样问题的人。底部间距始终存在的原因是因为一个名为 safeAreaInset
的属性,其默认值为 { bottom: 'always', top: 'never' }
我所要做的就是将 bottom
的值更改为 never
并且它不会在底部添加任何间距!
这是由于图标组件出现在标签上方。为了隐藏图标组件,我添加了以下代码。
tabBarOptions: {
tabStyle: {
justifyContent: 'center'
},
showIcon: false
}
尝试为 v 6.x
tabBarStyle:{ paddingBottom: 0 }
如果您不显示图标,请在标签样式中添加 {position: 'absolute', textAlignVertical: 'center'}
,例如:
<Tab.Navigator
screenOptions={{
tabBarIconStyle: {display: 'none'},
tabBarStyle: {
height: 40,
},
tabBarLabelStyle: {
fontSize: 20,
position: 'absolute',
textAlignVertical: 'center',
},
}}>
我使用来自 https://reactnavigation.org/docs/en/bottom-tab-navigator.html
的createBottomTabNavigator
在 React Native 中创建了一个导航器
我遇到的问题是我找不到将选项卡在选项卡栏内垂直居中的方法。
正如您在 screenshot 中看到的那样,选项卡底部始终有蓝色区域。即使我手动设置选项卡的高度,它们也会向上增长。如果我给标签栏设置flex:1
,它占了一半的屏幕,但蓝色区域仍然存在。
tabBar: {
backgroundColor: 'blue',
borderWidth: 2,
height: 32,
justifyContent: 'center',
alignItems: 'center',
padding: 0
},
labelStyle: {
backgroundColor: 'green',
},
tabStyle: {
backgroundColor: 'yellow',
flex: 1,
justifyContent: 'center',
alignItems: 'center',
alignSelf: 'center',
borderWidth: 1,
borderColor: 'black',
marginBottom: 0,
paddingBottom: 0,
},
这就是我创建导航栏的方式(为简单起见,我删除了图标):
const TabNavigator = createBottomTabNavigator(
{
screen1: { screen: screen1 },
screen2: { screen: screen2 },
screen3: { screen: screen3 },
screen4: { screen: screen4 },
},
{
tabBarOptions: {
style: styles.tabBar,
labelStyle: styles.labelStyle,
tabStyle: styles.tabStyle
},
}
);
const App = createAppContainer(TabNavigator);
export default () => {
return (
<SafeAreaView style={{ flex: 1, backgroundColor: 'red' }}>
<App />
</SafeAreaView>
);
};
我认为您应该将标签栏包裹在视图中并在其中添加 justifyContent
我自己找到了解决方案,并将其分享给有同样问题的人。底部间距始终存在的原因是因为一个名为 safeAreaInset
的属性,其默认值为 { bottom: 'always', top: 'never' }
我所要做的就是将 bottom
的值更改为 never
并且它不会在底部添加任何间距!
这是由于图标组件出现在标签上方。为了隐藏图标组件,我添加了以下代码。
tabBarOptions: {
tabStyle: {
justifyContent: 'center'
},
showIcon: false
}
尝试为 v 6.x
tabBarStyle:{ paddingBottom: 0 }
如果您不显示图标,请在标签样式中添加 {position: 'absolute', textAlignVertical: 'center'}
,例如:
<Tab.Navigator
screenOptions={{
tabBarIconStyle: {display: 'none'},
tabBarStyle: {
height: 40,
},
tabBarLabelStyle: {
fontSize: 20,
position: 'absolute',
textAlignVertical: 'center',
},
}}>