import React,{Component} from 'react' import {ViewPropTypes,StyleSheet,Text,View,StatusBar,Platform,DeviceInfo} from 'react-native' import {PropTypes} from 'prop-types' const NAV_BAR_HEIGHT_IOS = 44; const NAV_BAR_HEIGHT_ANDROID = 50; const STATUS_BAR_HEIGHT = DeviceInfo.isIPhoneX_deprecated ? 0:20; const StatusBarShape = {//设置状态栏所接受的属性 barStyle:PropTypes.oneOf(['light-content','default']), hidden:PropTypes.bool, backgroundColor:PropTypes.string, }; export default class NavigationBar extends Component{ //提供属性的类型检查 static propTypes = { style:ViewPropTypes.style, title:PropTypes.string, titleView:PropTypes.element, titleLayoutStyle:ViewPropTypes.style, hide:PropTypes.bool, statusBar:PropTypes.shape(StatusBarShape), leftButton:PropTypes.element, rightButton:PropTypes.element, }; //设置默认属性 static defaultProps = { statusBar:{ barStyle:'light-content', hidden:false, }, }; render() { let statusBar = !this.props.statusBar.hidden ? ( ):null; let titleView = this.props.titleView ? this.props.titleView:({this.props.title}); let content = this.props.hide?null: ( {this.getButtonElement(this.props.leftButton)} {titleView} {this.getButtonElement(this.props.rightButton)} ); return ( {statusBar} {content} ) } getButtonElement(data){ return ( {data ? data : null} ) } } const styles = StyleSheet.create({ container:{ backgroundColor:'#2196f3', }, statusBar_bar:{ height:Platform.OS==='ios'?STATUS_BAR_HEIGHT:0, }, statusBar_title:{ fontSize:18, color:'white', }, statusBar_navBar:{ flexDirection:'row', alignItems: 'center', justifyContent:'space-between', height:Platform.OS === 'ios'?NAV_BAR_HEIGHT_IOS:NAV_BAR_HEIGHT_ANDROID, }, statusBar_navBarTitleContainer:{ alignItems:'center', justifyContent: 'center', position:'absolute', left:40, right:40, top:0, bottom:0, }, navBarButton:{ alignItems:'center', }, });