使用native-base在React Native中,标题不居中

11

我正在使用native-base创建一个React Native应用程序:

我正在使用Header组件显示Body、Left和Right元素。根据文档,标题应该自动居中,但实际并没有(如下所示)。

我是否忽略了一些简单的东西?任何帮助都将不胜感激!

import { 
    Container,
    Header,
    Content,
    Left,
    Right,
    Body,
    Title,
    Icon
} from "native-base"

export default class Seminars extends React.Component{

    render(){
        return(
            <Container style={styles.container}>
                <Header style={styles.header}>
                    <Left>
                        <Icon name='arrow-back' />
                    </Left>
                    <Body>
                        <Title>Seminars</Title>
                    </Body>
                    <Right>
                        <Icon name='menu' />
                    </Right>
                </Header>
                <Content contentContainerStyle={styles.content} >
                    <Text>Content Here</Text>
                </Content>
            </Container>
        )
    }
}
const styles = StyleSheet.create({
    container: {

    },
    header: {
        paddingRight: 15,
        paddingLeft: 15
    },
    content: {
        display: "flex",
        flex: 1,
        justifyContent: "center",
        padding: 15
    }
});

在此输入图片描述


1
请将您的代码用代码标签发布,而不是以图像形式。 - Gabriel Diez
尝试移除在标题上添加的 paddingRight 和 left。 - Gabriel Diez
嗨 - 我更新了我的代码。去掉填充并没有帮助。 - Chris_S
2
你可以尝试这个:<Title style={{ alignSelf: 'center'}}> - Jigar Shah
那个也没起作用 :( - Chris_S
7个回答

16
如果您想让标题居中,您可以像这样在Left、Body和Right中添加flex:1
    return(
        <Container style={styles.container}>
            <Header style={styles.header}>
                <Left style={{flex:1}}>
                    <Icon name='arrow-back' />
                </Left>
                <Body style={{flex:1}}>
                    <Title>Seminars</Title>
                </Body>
                <Right style={{flex:1}}>
                    <Icon name='menu' />
                </Right>
            </Header>
            <Content contentContainerStyle={styles.content} >
                <Text>Content Here</Text>
            </Content>
        </Container>
    )

这是结果:

enter image description here

希望我的答案能够帮到你 :)


那个,@Chris_S,你的项目工作正常吗? - Syauqi Rahmat Sugara
嗨!是的 - 感谢你的帮助。现在看起来好多了 :) - Chris_S
很酷,@Chris_S,我非常高兴能够帮助你。 - Syauqi Rahmat Sugara
3
我将这部分添加到 body 标签中,样式为 {{flex:1,alignItems:'center'}},这就解决了问题。这真正地使其居中,在您的图片中,您会注意到它略微偏移。 - Joseph Astrahan

6
这个答案可以帮助你,对我有用。
        <Header style={{backgroundColor:'#ff2929'}}>
        <Left style={{flex: 1}}>
            <Button transparent style={{width: 65}}>
                <Icon style={{color:"#fff"}} type="MaterialIcons" name={this.props.imageLeft}/>
            </Button>
        </Left>
        <Body style={{flex: 3,justifyContent: 'center'}}>
        <Title style={{color: '#fff',alignSelf:'center'}}>{this.props.headerTitle}</Title>
        </Body>
        <Right style={{flex: 1}}>
            <Button transparent style={{width: 65}}>                    
                <Icon style={{color:this.props.color}} type="MaterialIcons" name={this.props.imageRight}/>
            </Button>
        </Right>
        </Header>

2
你可以尝试这个:

你也可以尝试以下方法:

      <Header>
          <Left style={{ flex: 1 }}>
            <Icon name="arrow-back" />
          </Left>
          <Body style={{ flex: 1 }}>
            <Title style={{ alignSelf: "center" }}>Seminars</Title>
          </Body>
          <Right style={{ flex: 1 }}>
            <Icon name="menu" />
          </Right>
        </Header>

1
我发现这是最好的方法,对我很有效。
<Header transparent>
    <Left style={{ flex: 1 }}>
        <Icon name='arrow-back' />
    </Left>
    <Body style={{ flex: 1 }}>
        <Title style={{ justifyContent: 'center', color: '#9fabdd' }}>Home</Title>
    </Body>
    <Right style={{ flex: 1 }}>
        <Icon name='arrow-back' />
    </Right>
</Header>

1
<Header>
  <Left style={{flex: 1}} />
  <Body style={{flex: 1}}>
    <Title style={{alignSelf: 'center'}}>Header</Title>
  </Body>
  <Right style={{flex: 1}} />
</Header>

0
static navigationOptions = ({ navigation }) => {
    return {

        headerTitle: (

  <Image  style={{width: 50, height: 10}} alignItems='center' source={require('../assets/zazzy.png')} />
  </View>
 ),
        headerLeft: (
            <View style={{ padding: 10 }}>
                <Ionicons name="ios-apps" color='gold' size={24} onPress={() => navigation.navigate('DrawerOpen')} />
            </View>
        ),
         headerRight: (
            <View style={{ padding: 10 }}>
                <Ionicons name="md-search" color='silver'  size={24} onPress={() => navigation.navigate('DrawerOpen')} />
            </View>
        )

    }
}
render() {
    return (
        <HomeScreenTabNavigator screenProps={{ navigation: this.props.navigation }} />

    )
}

}


1
欢迎来到SO。请正确格式化您的答案。并且请提供一些解释而不仅仅是代码。谢谢! - petezurich

0
      <Container style={styles.container}>
            <Header style={styles.header}>
                <Left style={{flex:1}}>
                    <Icon name='arrow-back' />
                </Left>
                <Body style={{flex:1}>
                    <Title style={{width:'100%'}}>Seminars</Title>
                </Body>
                <Right style={{flex:1}}>
                    <Icon name='menu' />
                </Right>
            </Header>
            <Content contentContainerStyle={styles.content} >
                <Text>Content Here</Text>
            </Content>
        </Container>

当左右两个项目的大小不相等时,我发现这是一个解决方案,适用于Android和iOS。


2
除了标题样式之外,这似乎与三年前被接受的答案完全相同。我错过了什么吗?在标题上设置宽度是否提供了解决问题的关键差异?如果是这样,我建议您编辑您的答案,使读者真正清楚。 - Jeremy Caney
如果我们想要它居中,就需要进行这种样式设置,其中width: 100%是关键要点。 - pewdie2pie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接