ReactNative之自定义导航条
前言
眼看很多公司都开始尝试使用ReactNative,达到跨平台开发,最近也写了很多文章,希望让更多想了解的同学快速上手ReactNative.
【ReactNative之自定义导航条】如果喜欢我的文章,可以关注我微博:袁峥Seemygo
ReactNative之自定义导航条
- 用RN开发App,肯定需要用到导航条,系统自带的导航条不好用,一般都需要自定义导航条。
- 自定义导航条思想:模仿iOS导航控制器封装了一套RN的导航条
- 自定义导航条暴露属性
- 导航条展示什么控件,全部由外界传进来,这样设计,拓展性比较好
static propTypes = {
// 左边按钮
leftBarButtonItem:PropTypes.object,
// 中间View
middleView:PropTypes.object,
// 右边按钮
rightBarButtonItem:PropTypes.object,
// 中间标题
title:PropTypes.string,
// 中间标题样式
titleStyle:PropTypes.object,
// 导航条整个内容,完全由自己自定义
contentView:PropTypes.object
};
自定义导航条封装代码
/**
* Created by ithinkeryz on 2017/5/15.
*/import React, { Component,PropTypes } from 'react';
import {
AppRegistry,
StyleSheet,
Text,
View,
Dimensions
} from 'react-native';
import Common from './Common'const NavigatorBarHeight = 64;
export default class CommonNavigationBar extends Component {// 暴露属性
static propTypes = {
// 左边按钮
leftBarButtonItem:PropTypes.object,
// 中间View
middleView:PropTypes.object,
// 右边按钮
rightBarButtonItem:PropTypes.object,
// 中间标题
title:PropTypes.string,
// 中间标题样式
titleStyle:PropTypes.object,
// 导航条整个内容,完全由自己自定义
contentView:PropTypes.object
};
constructor(props){
super(props);
// 不能同时设置中间标题和中间View
if (this.props.title && this.props.middleView)throw "导航控制器不能同时设置title,middleView"// 设置了contentView,不要同时设置其他属性
if (this.props.contentView && (this.props.middleView ||
this.props.rightBarButtonItem || this.props.title||
this.props.titleStyle || this.props.contentView)
) throw "设置了contentView,其他设置无效,不要同时设置"}// 渲染内容层
renderContentView(){
return (
{/*左边*/}
{this.props.leftBarButtonItem}
{/*中间*/}
{this.props.title?this.renderMiddleTitle():this.props.middleView}
{/*右边*/}
{this.props.rightBarButtonItem}
)
}// 渲染中间标题
renderMiddleTitle(){
return {this.props.title}
}render() {
return (
{this.props.contentView?this.props.contentView:this.renderContentView()}
);
}
}var styles = StyleSheet.create({
barStyle:{
backgroundColor:'white',
width:Common.screenW,
height:NavigatorBarHeight,
flexDirection:'row'
},
contentViewStyle:{
flexDirection:'row',
width:Common.screenW,
height:44,
backgroundColor:'white',
position:'absolute',
bottom:0
},
leftStyle:{
flex:1,
justifyContent:'center',
alignItems:'center'
},
middleStyle:{
flex:4,
justifyContent:'center',
alignItems:'center'
},
rightStyle:{
flex:1,
justifyContent:'center',
alignItems:'center'
},
middleTitleStyle:{
fontSize:20,
color:'black',
fontWeight:'bold'
}
});
自定义导航条使用
- 这样封装,使用非常简单
- 封装思想:易用,可扩展,两个条件都达到了
export default class Reading extends Component {render() {
return (
);
}renderMiddleView(){
return (
微信
)
}renderLeftBarButtonItem(){
return (
)
}
renderRightBarButtonItem(){
return (
右边
)
}
}
- 效果
文章图片
自定义导航条.png
推荐阅读
- 简年8(岁月辗转,你御风而去——子非我,安知我之苦())
- Python自动化办公之Excel对比工具
- [武侠]无双之名(33)
- 投稿|寺库被传跑路,奢侈品电商面临“伪命题”之争
- 关于|关于 InnoDB 锁的超全总结
- 我们仨之间
- 投稿|中国奶粉的高端化之战
- python3|python3 requests中文乱码之压缩格式问题解析
- 长大之后,你改变了自己的哪些观点()
- ASP.NET|ASP.NET Core自定义中间件的方式