源码
import React, { Component, PropTypes } from "react";
import { View, Text, StyleSheet, Platform, StatusBar, } from "react-native";
import { platform } from "os";
const NAV_BAR_HEIGHT_ANDROID = 50;
const NAV_BAR_HEIGHT_IOS = 44;
const STATUS_BAR_HEIGHT = 20;
const statusBarShape={
backgroundColor:PropTypes.string,
barStyle:PropTypes.oneOf('default','light-content','dark-content'),
hidden:PropTypes.bool,
}
export default class NavigationBar extends Component {
static propTypes = {
style: View.propTypes.style,
title: PropTyoes.string,
titleView: PropTypes.element,
hide: PropTypes.bool,
leftButton: PropTypes.element,
rightButton: PropTypes.element,
statusBar:PropTypes.shap(statusBarShape)
};
static defaultProps={
statusBar:{
barStyle:'light-content',
hidden:false,
}
}
constructor(props) {
super(props);
this.state = {
title: "",
hide: false
};
}
render() {
let status = <View style={[styles.statusBar,this.props.statusBar]}>
<StatusBar {...this.props.statusBar}/>
</View>;
let titleView = this.props.titleView ? (
this.props.titleView
) : (
<Text style={styles.title}>{this.props.title}</Text>
);
let content = (
<View style={styles.navBar}>
{this.props.leftButton}
<View style={styles.titleViewContainer}>{titleView}</View>
{this.props.rightButton}
</View>
);
return <View style={[StyleSheet.container,this.props.style]}>
{status}
{content}
</View>;
}
}
const styles = StyleSheet.create({
container: {
backgroundColor: "grey"
},
navBar: {
justifyContent: "space-between",
alignItem: "center",
height: Platform.OS === "ios" ? NAV_BAR_HEIGHT_IOS : NAV_BAR_HEIGHT_ANDROID,
flexDirection: "row"
},
titleViewContainer: {
justifyContent: "center",
alignItem: "center",
positon: "absolute",
left: 40,
right: 40,
top: 0,
bottom: 0
},
title: {
fontSize: 20,
color: "white"
},
statusBar: {
height: Platform.OS === "ios" ? STATUS_BAR_HEIGHT : 0
}
});