五一佳节匆匆而过,有人选择在外面看人山人海,有人选择宅在家中度过五一,也有人依然坚守在第一线,致敬!
这是坚持学习react-native的第二篇文章,可能会迟到,但是绝不会缺席,这篇要涉及到的是react-navigation,也是rn社区主推的一个导航库。

网上关于react-navigation的基本使用也是一抓一大把,这里对于它的使用不做过多介绍,主要记录使用过程中的其他问题。

因为android 和iOS 手机的不同,导航栏的显示也不太一样,而这篇文章会尽量的配置属性,让两端的导航栏样式、页面跳转的动画保持一致,同时还会介绍底部导航栏添加角标的方法。

这里使用的是3.9.1版本,网上好多文章是2.x版本的,用法基本大同小异。

android 导航栏标题居中适配

默认情况下,iOS的标题居中显示,而android的则不!!!

解决createStackNavigatordefaultNavigationOptions属性里配置textAlignflex

const AppStackNavigator = createStackNavigator({HomeScreen: {screen: HomeScreen},RainScreen: {screen: RainScreen}
},{defaultNavigationOptions:{...headerTitleStyle: { ...textAlign: "center", //用于android 机型标题居中显示flex:1}}
})

:android机型标题默认不居中,textAlignflex的属性配置用于android机型标题居中显示。
在这种情况下,如果配置了headerLeft或者headerRight 属性,会出现标题偏移的现象。

直接在defaultNavigationOptions里配置空view的headerLeftheaderRight

    defaultNavigationOptions:{...headerTitleStyle: {...textAlign: "center", //用于android 机型标题居中显示flex:1,},headerRight: <View/>,headerLeft: <View/>}

这时候标题居中,同时可以在各自的页面里面去重写headerLeft的样式。

android 导航栏去除阴影样式

android的导航栏还有阴影的样式,添加elevation 设置阴影的偏移量

defaultNavigationOptions:{headerStyle:{backgroundColor:"#fff",elevation:0.5},...
}


至此的导航栏的效果跟iOS基本保持一致。

android 页面跳转动画,自右向左打开

默认的android页面跳转是自下而上打开页面,而要与iOS的保持一致的自右向左,配置transitionConfig属性。

const AppStackNavigator = createStackNavigator({HomeScreen: {screen: HomeScreen},...
},{defaultNavigationOptions:{...},transitionConfig: () => ({screenInterpolator: (sceneProps) => {return StackViewStyleInterpolator.forHorizontal(sceneProps)},}),
})

底部导航添加消息角标

有时候我们会遇到这样的需求,在底部导航处添加消息的角标,提醒用户阅读的。

tabBarIcon的属性里直接添加图标显示的,这里的msg变量数值是全局的,只做演示使用,实际项目里可以根据接口返回数据,可以搭配mobx 一起使用。

const rootTab = createBottomTabNavigator({...info: {screen: InfoStack,navigationOptions: {tabBarLabel: "消息",tabBarIcon: ({focused, tintColor}) => {let icon = focused ?require('../resources/img/mine_icon_message_selected.png') :require('../resources/img/mine_icon_message_default.png');return <View>{msg > 0 ?<View style={{width:12,height:12,justifyContent:"center",position: 'absolute',zIndex: 9,backgroundColor: "#FB3768",borderRadius:6,right:0,top:-2,}}><Text style={[{fontSize:10, color:"#fff", textAlign:"center",}]}>{msg}</Text></View> : null}<Image source={icon} style={{width: 34, height: 26}}/></View>}}}
},{...defaultNavigationOptions: ({navigation, screenProps}) => ({tabBarOnPress: (obj) => {//点击的时候清除消息const {routeName} = obj.navigation.state;if (routeName === "info") {msg = 0}obj.navigation.navigate(obj.navigation.state.key)}})
})

以上几点是在react-navigation的使用过程中遇到的问题以及解决方法,相关代码已经传到了github上https://github.com/taixiang/reactNativeDemo,仅供参考,如果有更好的方式 欢迎一起学习研究。

欢迎关注我的个人博客:https://www.manjiexiang.cn/

更多精彩欢迎关注微信号:春风十里不如认识你
一起学习,一起进步,欢迎上车,有问题随时联系,一起解决!!!

转载于:https://www.cnblogs.com/taixiang/p/10822342.html

React Navigation 导航栏样式调整+底部角标消息提示相关推荐

  1. 手机直播源码,底部导航栏样式

    手机直播源码,底部导航栏样式 我们应该在项目的res文件夹下新建一个menu文件夹,用来装menu布局文件 <?xml version="1.0" encoding=&quo ...

  2. React-Native 之 GD (二)自定义共用导航栏样式

    1.自定义导航栏样式 步骤一:从效果图中可以看出,导航栏的样式都差不多,因为我们前面已经设置了 Navigator ,这边的话我们还需要自定义 Navigator 的样式,可以看到所有的 Naviga ...

  3. 微信小程序入门四: 导航栏样式、tabBar导航栏

    实例内容 导航栏样式设置 tabBar导航栏 实例一:导航栏样式设置 小程序的导航栏样式在app.json中定义. 这里设置导航,背景黑色,文字白色,文字内容测试小程序 app.json内容: {&q ...

  4. 导航栏样式HTML,[JavaScript 实例] 导航栏几种常见样式

    这里记录下导航栏几种常见的样式,仅供大家参考. 导航栏1 (原生 JS 代码) 比较常见也比较简单的导航栏 ,用的 JavaScript 原生代码,大致思路是通过改变 li 元素的 className ...

  5. 【Flutter】底部导航栏实现 ( BottomNavigationBar 底部导航栏 | BottomNavigationBarItem 导航栏条目 | PageView )

    文章目录 一.Scaffold 组件 二.底部导航栏整体架构 三.BottomNavigationBar 底部导航栏 四.BottomNavigationBarItem 导航栏条目 五.PageVie ...

  6. uniapp-自定义导航栏样式不生效问题(一)

    刚接触uniapp不久,这是我踩到的最心酸的坑T^T 1.我设置了一个自定义组件,用作导航栏,结果出bug了,如下图: 2.首先,h5端是完全没有问题的,可以正常显示,就是微信开发者工具排版错乱了 3 ...

  7. android仿咸鱼底部导航栏,Flutter沉浸式状态栏/AppBar导航栏/仿咸鱼底部凸起导航栏效果...

    如下图:状态栏是指android手机顶部显示手机状态信息的位置. android 自4.4开始新加入透明状态栏功能,状态栏可以自定义颜色背景,使titlebar能够和状态栏融为一体,增加沉浸感. 如上 ...

  8. 直播系统代码,自行更改导航栏样式

    直播系统代码,自行更改导航栏样式实现的相关代码 1.添加导航栏的UI引用 app.module.tsimport { MatToolbarModule } from '@angular/materia ...

  9. Android 11.0 SystemUI导航栏固定在底部显示的修改

    目录 1.概述 2.SystemUI导航栏固定在底部显示的修改的相关代码

最新文章

  1. R语言生存分析寿命表(life table)实战案例:比较两种药物治疗感染患者的生存时间
  2. 核磁共振影像数据处理-2-DWI实践:计算ADC (MD) map、Li‘s have a solution and plan.
  3. RNA-seq技术之转录组从头组装介绍
  4. 机器学习(MACHINE LEARNING)多属性决策模型
  5. bugzilla dbd-mysql_在Red Hat Linux下安装配置Bugzilla
  6. 14个数据库的设计技巧 (来自Blogcn中我的窝)
  7. 基于XML的AOP实现事务控制
  8. ARM汇编中lr(r14)寄存器的作用
  9. RhinoMock入门(4)——次序和委托
  10. Spring @Async 注解
  11. 弹出窗弹出两次的原因
  12. 陆奇下下选,YC上上签
  13. linux 清空进程recv q,Linux中ss命令Recv-Q和Send-Q详解
  14. WebService、RMI、RPC、XML-RPC、JSON-RPC、SOAP、REST(rest-api、restful)等web服务实现方案概念...
  15. 用户、角色、权限管理-设计方案之权限检测
  16. 《计算机网络 自顶向下方法》 第1章 计算机网络和因特网
  17. hive窗口函数最全总结
  18. 工作站性能测试软件,国产工作站“王炸”来了! 曙光桌面工作站评测
  19. 3dmax材质编辑器模糊字有重影怎么解决?
  20. Foxmail设置的学习

热门文章

  1. java学习(8):巩固练习
  2. arm-none-eabi-gcc 嵌入式交叉编译器安装 极简教程
  3. vue element项目常见实现表格内部可编辑功能
  4. java零钱换整程序_贪心算法换零钱(java)
  5. keil写文字怎么会乱码_主持稿怎么写才会吸引人
  6. javascript的stack overflow
  7. echarts地图的基本使用配置
  8. STM32 RS485 和串口 只能接收不能发送问题解决
  9. 【bzoj3224】普通平衡树——treap
  10. 阐述linux IPC(五岁以下儿童):system V共享内存