我们怎样才能让 react-navigation header 的标题居中?
How can we center title of react-navigation header?
React-navigation 文档还很年轻,通读这些问题对我来说不是很有效(每个版本都有变化)有没有人有使用 Android 居中标题的工作方法 react-navigation
在 React Native 中?
您可以使用此文件更改在 React 导航的堆栈导航器中为 android 设置 header 标题中心:
node_modules\react-navigation\src\views\Header.js
在 Header.js 文件中更改此代码:-
title: {
bottom: 0,
left: TITLE_OFFSET,
right: TITLE_OFFSET,
top: 0,
position: 'absolute',
alignItems: Platform.OS === 'ios' ? 'center' : 'center',
},
确保在导致堆栈溢出之前检查问题,通常更有帮助。issue regarding your problem但是正如 himanshu 在评论中所说,您需要访问标题样式 属性 以调整标题想要。
static navigationOptions = {
header: (navigation) => ({
title: <Text style={{
color: 'rgba(0, 0, 0, .9)',
fontWeight: Platform.OS === 'ios' ? '600' : '500',
fontSize: Platform.OS === 'ios' ? 17 : 18,
alignSelf: 'center'
}}>Filters</Text>,
right: <SearchButton />,
left: <CancelButton />,
})
};
如问题所示,我想您已经设法找到了解决方案,因为这是不久前的事了。但对于其他遇到此问题的人来说,它可能会有所帮助。
警告:react-navigation 改变很多,标题对齐的方式,从我第一次回答它已经改变了 2-3 次。
如果我的答案不适合您,请查看其他答案。
2021/08/31 修改:
在 2020 年,headerLayoutPreset 也被弃用了。新方法是通过 defaultNavigationOptions:(@ThatFrenchComputerGuy 的回答帮助了我)
const AppNavigator = createStackNavigator({
Home: { screen: HomeScreen },
},
{
defaultNavigationOptions: {
title: 'Aligned Center',
headerTitleAlign: 'center'
}
});
2019/03/12 修改:
2018 年,在 react-navigation v2 发布后(2018 年 4 月 7 日),由于某种原因 alignSelf
不再工作。这是新的工作方式,使用headerLayoutPreset。来自@HasanSH:
const HomeActivity_StackNavigator = createStackNavigator({
Home: {screen: Main},
}, {headerLayoutPreset: 'center'});
原始答案 2017/07/11:
static navigationOptions = {
headerTitleStyle: { alignSelf: 'center' },
title: 'Center Title',
}
仅当左侧没有后退按钮时,接受的答案才对我有效。在这种情况下,您需要在右侧设置一个空视图以使其正确居中。
static navigationOptions = {
headerTitleStyle: { alignSelf: 'center' },
title: 'Center Title',
headerRight: (<View />)
}
要使 header 标题居中,我们需要通过添加 flex 属性 来实现 flex header。
navigationOptions: {
title: "Title center",
headerTitleStyle: {
textAlign:"center",
flex:1
},
}
将react-navigation header 标题设置在中间。使用 headerTitleStyle CSS.
static navigationOptions = {
title: 'Home',
headerTintColor: '#fff',
headerTitleStyle: {
width: '90%',
textAlign: 'center',
},
};
最好的方法是实施文档中列出的内容:
在StackNavigatorConfig
里面赋值一个可选的属性,如下:
createStackNavigator({
{ ... // your screens},
{ ...,
headerLayoutPreset: 'center' // default is 'left'
})
headerLayoutPreset
- 指定如何布置 header 组件。
通过这样做,您根本不必弄乱样式。它将应用于该堆栈中的所有嵌套屏幕。
勾选Source
headerTitleStyle: {
color: 'white',
textAlign: 'center',
flex: 1
}
static navigationOptions = {
headerTitleStyle: { justifyContent: 'center' },
}
navigationOptions:({navigation}) =>({
gesturesEnabled :false,
headerTitleStyle : {
color:"white",
fontFamily:"OpenSans",
alignSelf: 'center' ,
textAlign: 'center',
flex:1
},
}),
这里。 => {flex:1 ,textAlign: 'center' and alignSelf: 'center'}
适合我!
您应该将 headerLayoutPreset: 'center' 添加到您的 createeStackNavigator 函数中。
这是唯一正确的方法:
const someStack = createStackNavigator({
ConfigurationScreen: ConfigurationScreen,
PreferencesScreen: PreferencesScreen},
{ headerLayoutPreset: 'center' });
参考:
https://github.com/react-navigation/react-navigation/pull/4588
这对我有用:)
static navigationOptions = {
title: "SAMPLE",
headerTitleStyle: { flex: 1, textAlign: 'center'},
};
这绝对适用于android
headerTitleStyle:{
flex: 1, textAlign: 'center'
},
这对我适用于 Android & iOS:
static navigationOptions = {
headerTitleStyle: {
textAlign: 'center',
flexGrow: 1,
},
headerRight: (<View/>)
};
headerTitleStyle: {
颜色:'white',
文本对齐:'center',
弹性:1
}
headerTitleStyle :{textAlign: 'center', flex: 1}
对我有用
在 defaultNavigationOptions
中插入并设置 headerTitleAlign
值。以下是示例:
const MainStack = createStackNavigator(
{
...
defaultNavigationOptions: {
headerTitleAlign: 'center',
}
}
)
自 2021 年起,您可以使用 headerTitleAlign。
虽然 headerLayoutPreset 在技术上可行,但它应该显示一条消息,通知 expo 用户 已弃用它。
实现如下:
const AppNavigator = createStackNavigator({
Home: HomeScreen,
},
{
defaultNavigationOptions: {
title: 'Centered',
headerTitleAlign: 'center'
}
})
React-Navigation v5.x 更新:
根据@Ewan 的纠正,如果您使用的是 React-Navigation v5.x,则无法将参数传递给 createStackNavigator()。因此,您应该按如下方式实现它:
<Stack.Navigator screenOptions={{headerTitleAlign: 'center'}}>
如果您正在使用 react-navigation v4
const stack = createStackNavigator({
screen1: {screen: Screen},
},{
defaultNavigationOptions: {
headerTitleAlign: 'left | center',
}
});
文档:
https://reactnavigation.org/docs/en/stack-navigator.html#headertitlealign
或者如果您使用的是 react-navigation v3
const stack = createStackNavigator({
screen1: {screen: Screen},
},{
headerLayoutPreset: 'left | center',
});
文档:
https://reactnavigation.org/docs/en/3.x/stack-navigator.html
对于 @react-navigation/native@next
,我可以确认 { headerTitleAlign: 'center' }
在 android 上对我有效。示例如下:
<Stack.Navigator screenOptions={{ headerTitleAlign: 'center' }}>
<Stack.Screen name="Promo" component={PromoScreen} />
<Stack.Screen name="Settings" component={SettingsNavigator} />
</Stack.Navigator>
我正在使用具有以下开发依赖项的 React 导航,使用 alignSelf 和 textAlign 我收到警告
"dependencies": {
"@react-native-community/masked-view": "^0.1.6",
"@react-navigation/native": "^5.0.0",
"@react-navigation/stack": "^5.0.0",
"base64-js": "^1.3.1",
"lodash": "^4.17.15",
"react": "16.9.0",
"react-native": "0.61.5",
"react-native-base64": "0.0.2",
"react-native-ble-plx": "^1.1.1",
"react-native-gesture-handler": "^1.5.6",
"react-native-reanimated": "^1.7.0",
"react-native-safe-area-context": "^0.7.2",
"react-native-screens": "^2.0.0-beta.2"
},
上述选项的 none 对我有用,然后我尝试了 属性 headerTitleAlign: 'centre' 并且成功了。
下面是我的组件代码
const App = () => {
return (
<NavigationContainer>
<Stack.Navigator
<Stack.Screen
name="Home"
component={HomeScreen}
options={{
title: 'Track Down',
headerTitleAlign: 'center',
}}
/>
</Stack.Navigator>
</NavigationContainer>
);
};
headerTitleAlign: {
alignItems: 'center',
justifyContent: 'center'
},
在 React Navigation v5 上,我设法使视图居中的唯一方法是像这样使用它:
<MainStack.Navigator
screenOptions={{
headerTitleAlign: 'center',
}}>
...
<MainStack.Screen
...
options={({navigation, route}) => ({
headerTitle: () => <ViewButton />,
...
})}
对于 2020 年搜索的任何人,这对我有用:
<Stack.Navigator screenOptions={{headerTitleAlign: 'center'}}>
https://reactnavigation.org/docs/stack-navigator/#headertitlealign
使用 React Navigation v5 您还可以使用以下选项:
headerTitleAlign:'center'
就像下面的例子一样,我想完美地居中标题。
<Stack.Screen
name="Settings"
component={SettingsScreen}
options={{
title: 'SMS Recipient Number',
headerShown: true,
headerTitleAlign:'center'
}}
/>
在navigationOptions
中添加headerTitleAlign: 'center'
示例:
static navigationOptions = ({navigation}) => ({
headerTitle: (
<Image
style={{width: 100, height: 100}}
resizeMode="contain"
source={icons.logo}
/>
),
headerTitleAlign: 'center',
});
这对我来说适用于最新版本 16.9.0,
defaultNavigationOptions : {title: 'App', headerTitleAlign: 'center' }
自 2020 年 5 月 30 日起,您不能再向 createStackNavigator()
传递任何参数。
要使您的标题居中,您必须使用以下内容(使用 headerTitleAlign
属性):
<Stack.Screen
name="Centered"
component={Centered}
options={{
title: 'Centered title',
headerShown: true,
headerTitleAlign:'center'
}}
/>
在 2020 年,如果有人像我一样遇到问题,下面的片段对我有用。
<Stack.Screen options={({ route, navigation }) => ({
title: "Register",
headerTitleAlign: "center")
})}
/>
在反应导航V5
<AuthStack.Screen
name="SignupScreen"
component={SignupScreen}
options={{ title: "Sign Up", animationEnabled: false, headerTitleAlign: 'center', }}
/>
根据 ReactNavigation 的版本 5.x,您可以使用选项 header 属性 headerTitleAlign 和值 center 。这是代码示例:
<Stack.Screen name="ScreenRegister" component={ScreenRegister}
options={{
headerTitle: props => <LogoHeader {...props} />,
headerTitleAlign: 'center'
}}
/>
如果 header 有超过 1 个项目,即左、右、中,如下所示:
<TabOneStack.Screen
name="HomeScreen"
component={TabOneScreen}
options={{
headerLeftContainerStyle: { marginLeft: 10 },
headerRightContainerStyle: { marginRight: 10 },
headerTitleContainerStyle: { backgroundColor: "yellow", alignItems: "center" },
headerLeft: () => <ProfilePicture image="https://pbs.twimg.com/profile_images/1383042648550739968/fS6W0TvY_200x200.jpg" size={40} />,
headerTitle: () => (<Ionicons name="logo-amazon" size={30} />),
headerRight: () => (<MaterialCommunityIcons name="star-four-points-outline" size={30} />)
}}
/>
然后将 alignItems:center
添加到 headerTitleContainerStyle
将使标题组件居中
只需使用选项 属性另外,
<Stack.Screen
component={HomeScreen}
name="Skin Cancer Prediction"
options={{
headerTitleAlign: "center",
}}
/>
你可以开始了
虽然我遇到了同样的事情,但解决方案非常简单。
我刚刚添加了一行代码 headerTitleAlign: 'center',
function HomeNavigator() {
return (
<TabOneStack.Navigator>
<TabOneStack.Screen
name="HomeScreen"
component={TabOneScreen}
options={{
headerRightContainerStyle: {
marginRight: 20,
},
headerTitleAlign: 'center', <-------- here
headerTitle: () => (
<Ionicons
name={'logo-twitter'}
color={Colors.light.tint}
size={30}
/>
),
}}
/>
</TabOneStack.Navigator>
)
}
对于 React Navigation V6
以下对我来说工作正常:
<Stack.Navigator screenOptions={{ headerTitleAlign: "center" }}>
// Put all of your screens here <Stack.Screen ... />
</Stack.Navigator>
React-navigation 文档还很年轻,通读这些问题对我来说不是很有效(每个版本都有变化)有没有人有使用 Android 居中标题的工作方法 react-navigation
在 React Native 中?
您可以使用此文件更改在 React 导航的堆栈导航器中为 android 设置 header 标题中心:
node_modules\react-navigation\src\views\Header.js
在 Header.js 文件中更改此代码:-
title: {
bottom: 0,
left: TITLE_OFFSET,
right: TITLE_OFFSET,
top: 0,
position: 'absolute',
alignItems: Platform.OS === 'ios' ? 'center' : 'center',
},
确保在导致堆栈溢出之前检查问题,通常更有帮助。issue regarding your problem但是正如 himanshu 在评论中所说,您需要访问标题样式 属性 以调整标题想要。
static navigationOptions = {
header: (navigation) => ({
title: <Text style={{
color: 'rgba(0, 0, 0, .9)',
fontWeight: Platform.OS === 'ios' ? '600' : '500',
fontSize: Platform.OS === 'ios' ? 17 : 18,
alignSelf: 'center'
}}>Filters</Text>,
right: <SearchButton />,
left: <CancelButton />,
})
};
如问题所示,我想您已经设法找到了解决方案,因为这是不久前的事了。但对于其他遇到此问题的人来说,它可能会有所帮助。
警告:react-navigation 改变很多,标题对齐的方式,从我第一次回答它已经改变了 2-3 次。
如果我的答案不适合您,请查看其他答案。
2021/08/31 修改:
在 2020 年,headerLayoutPreset 也被弃用了。新方法是通过 defaultNavigationOptions:(@ThatFrenchComputerGuy 的回答帮助了我)
const AppNavigator = createStackNavigator({
Home: { screen: HomeScreen },
},
{
defaultNavigationOptions: {
title: 'Aligned Center',
headerTitleAlign: 'center'
}
});
2019/03/12 修改:
2018 年,在 react-navigation v2 发布后(2018 年 4 月 7 日),由于某种原因 alignSelf
不再工作。这是新的工作方式,使用headerLayoutPreset。来自@HasanSH:
const HomeActivity_StackNavigator = createStackNavigator({
Home: {screen: Main},
}, {headerLayoutPreset: 'center'});
原始答案 2017/07/11:
static navigationOptions = {
headerTitleStyle: { alignSelf: 'center' },
title: 'Center Title',
}
仅当左侧没有后退按钮时,接受的答案才对我有效。在这种情况下,您需要在右侧设置一个空视图以使其正确居中。
static navigationOptions = {
headerTitleStyle: { alignSelf: 'center' },
title: 'Center Title',
headerRight: (<View />)
}
要使 header 标题居中,我们需要通过添加 flex 属性 来实现 flex header。
navigationOptions: {
title: "Title center",
headerTitleStyle: {
textAlign:"center",
flex:1
},
}
将react-navigation header 标题设置在中间。使用 headerTitleStyle CSS.
static navigationOptions = {
title: 'Home',
headerTintColor: '#fff',
headerTitleStyle: {
width: '90%',
textAlign: 'center',
},
};
最好的方法是实施文档中列出的内容:
在StackNavigatorConfig
里面赋值一个可选的属性,如下:
createStackNavigator({
{ ... // your screens},
{ ...,
headerLayoutPreset: 'center' // default is 'left'
})
headerLayoutPreset
- 指定如何布置 header 组件。
通过这样做,您根本不必弄乱样式。它将应用于该堆栈中的所有嵌套屏幕。
勾选Source
headerTitleStyle: {
color: 'white',
textAlign: 'center',
flex: 1
}
static navigationOptions = {
headerTitleStyle: { justifyContent: 'center' },
}
navigationOptions:({navigation}) =>({
gesturesEnabled :false,
headerTitleStyle : {
color:"white",
fontFamily:"OpenSans",
alignSelf: 'center' ,
textAlign: 'center',
flex:1
},
}),
这里。 => {flex:1 ,textAlign: 'center' and alignSelf: 'center'}
适合我!
您应该将 headerLayoutPreset: 'center' 添加到您的 createeStackNavigator 函数中。
这是唯一正确的方法:
const someStack = createStackNavigator({
ConfigurationScreen: ConfigurationScreen,
PreferencesScreen: PreferencesScreen},
{ headerLayoutPreset: 'center' });
参考: https://github.com/react-navigation/react-navigation/pull/4588
这对我有用:)
static navigationOptions = {
title: "SAMPLE",
headerTitleStyle: { flex: 1, textAlign: 'center'},
};
这绝对适用于android
headerTitleStyle:{
flex: 1, textAlign: 'center'
},
这对我适用于 Android & iOS:
static navigationOptions = {
headerTitleStyle: {
textAlign: 'center',
flexGrow: 1,
},
headerRight: (<View/>)
};
headerTitleStyle: { 颜色:'white', 文本对齐:'center', 弹性:1 }
headerTitleStyle :{textAlign: 'center', flex: 1}
对我有用
在 defaultNavigationOptions
中插入并设置 headerTitleAlign
值。以下是示例:
const MainStack = createStackNavigator(
{
...
defaultNavigationOptions: {
headerTitleAlign: 'center',
}
}
)
自 2021 年起,您可以使用 headerTitleAlign。
虽然 headerLayoutPreset 在技术上可行,但它应该显示一条消息,通知 expo 用户 已弃用它。 实现如下:
const AppNavigator = createStackNavigator({
Home: HomeScreen,
},
{
defaultNavigationOptions: {
title: 'Centered',
headerTitleAlign: 'center'
}
})
React-Navigation v5.x 更新: 根据@Ewan 的纠正,如果您使用的是 React-Navigation v5.x,则无法将参数传递给 createStackNavigator()。因此,您应该按如下方式实现它:
<Stack.Navigator screenOptions={{headerTitleAlign: 'center'}}>
如果您正在使用 react-navigation v4
const stack = createStackNavigator({
screen1: {screen: Screen},
},{
defaultNavigationOptions: {
headerTitleAlign: 'left | center',
}
});
文档:
https://reactnavigation.org/docs/en/stack-navigator.html#headertitlealign
或者如果您使用的是 react-navigation v3
const stack = createStackNavigator({
screen1: {screen: Screen},
},{
headerLayoutPreset: 'left | center',
});
文档:
https://reactnavigation.org/docs/en/3.x/stack-navigator.html
对于 @react-navigation/native@next
,我可以确认 { headerTitleAlign: 'center' }
在 android 上对我有效。示例如下:
<Stack.Navigator screenOptions={{ headerTitleAlign: 'center' }}>
<Stack.Screen name="Promo" component={PromoScreen} />
<Stack.Screen name="Settings" component={SettingsNavigator} />
</Stack.Navigator>
我正在使用具有以下开发依赖项的 React 导航,使用 alignSelf 和 textAlign 我收到警告
"dependencies": {
"@react-native-community/masked-view": "^0.1.6",
"@react-navigation/native": "^5.0.0",
"@react-navigation/stack": "^5.0.0",
"base64-js": "^1.3.1",
"lodash": "^4.17.15",
"react": "16.9.0",
"react-native": "0.61.5",
"react-native-base64": "0.0.2",
"react-native-ble-plx": "^1.1.1",
"react-native-gesture-handler": "^1.5.6",
"react-native-reanimated": "^1.7.0",
"react-native-safe-area-context": "^0.7.2",
"react-native-screens": "^2.0.0-beta.2"
},
上述选项的none 对我有用,然后我尝试了 属性 headerTitleAlign: 'centre' 并且成功了。
下面是我的组件代码
const App = () => {
return (
<NavigationContainer>
<Stack.Navigator
<Stack.Screen
name="Home"
component={HomeScreen}
options={{
title: 'Track Down',
headerTitleAlign: 'center',
}}
/>
</Stack.Navigator>
</NavigationContainer>
);
};
headerTitleAlign: {
alignItems: 'center',
justifyContent: 'center'
},
在 React Navigation v5 上,我设法使视图居中的唯一方法是像这样使用它:
<MainStack.Navigator
screenOptions={{
headerTitleAlign: 'center',
}}>
...
<MainStack.Screen
...
options={({navigation, route}) => ({
headerTitle: () => <ViewButton />,
...
})}
对于 2020 年搜索的任何人,这对我有用:
<Stack.Navigator screenOptions={{headerTitleAlign: 'center'}}>
https://reactnavigation.org/docs/stack-navigator/#headertitlealign
使用 React Navigation v5 您还可以使用以下选项:
headerTitleAlign:'center'
就像下面的例子一样,我想完美地居中标题。
<Stack.Screen
name="Settings"
component={SettingsScreen}
options={{
title: 'SMS Recipient Number',
headerShown: true,
headerTitleAlign:'center'
}}
/>
在navigationOptions
headerTitleAlign: 'center'
示例:
static navigationOptions = ({navigation}) => ({
headerTitle: (
<Image
style={{width: 100, height: 100}}
resizeMode="contain"
source={icons.logo}
/>
),
headerTitleAlign: 'center',
});
这对我来说适用于最新版本 16.9.0,
defaultNavigationOptions : {title: 'App', headerTitleAlign: 'center' }
自 2020 年 5 月 30 日起,您不能再向 createStackNavigator()
传递任何参数。
要使您的标题居中,您必须使用以下内容(使用 headerTitleAlign
属性):
<Stack.Screen
name="Centered"
component={Centered}
options={{
title: 'Centered title',
headerShown: true,
headerTitleAlign:'center'
}}
/>
在 2020 年,如果有人像我一样遇到问题,下面的片段对我有用。
<Stack.Screen options={({ route, navigation }) => ({
title: "Register",
headerTitleAlign: "center")
})}
/>
在反应导航V5
<AuthStack.Screen
name="SignupScreen"
component={SignupScreen}
options={{ title: "Sign Up", animationEnabled: false, headerTitleAlign: 'center', }}
/>
根据 ReactNavigation 的版本 5.x,您可以使用选项 header 属性 headerTitleAlign 和值 center 。这是代码示例:
<Stack.Screen name="ScreenRegister" component={ScreenRegister}
options={{
headerTitle: props => <LogoHeader {...props} />,
headerTitleAlign: 'center'
}}
/>
如果 header 有超过 1 个项目,即左、右、中,如下所示:
<TabOneStack.Screen
name="HomeScreen"
component={TabOneScreen}
options={{
headerLeftContainerStyle: { marginLeft: 10 },
headerRightContainerStyle: { marginRight: 10 },
headerTitleContainerStyle: { backgroundColor: "yellow", alignItems: "center" },
headerLeft: () => <ProfilePicture image="https://pbs.twimg.com/profile_images/1383042648550739968/fS6W0TvY_200x200.jpg" size={40} />,
headerTitle: () => (<Ionicons name="logo-amazon" size={30} />),
headerRight: () => (<MaterialCommunityIcons name="star-four-points-outline" size={30} />)
}}
/>
然后将 alignItems:center
添加到 headerTitleContainerStyle
将使标题组件居中
只需使用选项 属性另外,
<Stack.Screen
component={HomeScreen}
name="Skin Cancer Prediction"
options={{
headerTitleAlign: "center",
}}
/>
你可以开始了
虽然我遇到了同样的事情,但解决方案非常简单。
我刚刚添加了一行代码 headerTitleAlign: 'center',
function HomeNavigator() {
return (
<TabOneStack.Navigator>
<TabOneStack.Screen
name="HomeScreen"
component={TabOneScreen}
options={{
headerRightContainerStyle: {
marginRight: 20,
},
headerTitleAlign: 'center', <-------- here
headerTitle: () => (
<Ionicons
name={'logo-twitter'}
color={Colors.light.tint}
size={30}
/>
),
}}
/>
</TabOneStack.Navigator>
)
}
对于 React Navigation V6 以下对我来说工作正常:
<Stack.Navigator screenOptions={{ headerTitleAlign: "center" }}>
// Put all of your screens here <Stack.Screen ... />
</Stack.Navigator>