cover-img
avatar

托码特人

分享科技与人文

一个关注互联网的技术博客

ReactNative导航的解决方案

一、纯 JS 的解决方案:React Navigation

易用、跨平台、良好的状态管理
教程:

https://www.jianshu.com/p/2f575cc35780 > https://www.jianshu.com/p/b877115fff1b

概况,React Navigation 分为三个部分:

StackNavigator:类似顶部导航条,用来跳转页面和传递参数;
TabNavigator:类似底部标签,用来区分模块;
DrawerNavigator:抽屉,类似从APP侧滑出一个页面

1、注意事项

iOS 和 Android 平台的 tabs 默认行为不一致,表现在 iOS 正常,安卓的 tab 在顶部且处于可滑动状态,一统江山方法如下:

const Navigation = TabNavigator(
    {
        tab1: { screen: screen1 },
        tab2: { screen: screen2 },
    },
    // customize app tab bars
    {
        tabBarPosition: 'bottom',
        tabBarComponent: TabBarBottom, // 安卓默认是顶部,不设置该项可能导致tabIcon位置错误
        swipeEnabled: false, // 安卓默认可滑动
        lazy: true,
        initialRouteName: 'Offline',
        tabBarOptions: {
            indicatorStyle: {
                height: 0, // android 中TabBar下面会显示一条线,高度设为 0 后就不显示线了
            },
            style: {
                height: 49,
                backgroundColor: 'white'
          },
            labelStyle: {
                marginBottom: 3
            },
            iconStyle: {
                height: 24,
                width: 24,
                margin: 0
            },
            showIcon: true, // 是否显示图标,安卓默认关闭
            // label和icon的前景色 活跃状态下(选中)
            activeTintColor: '#4ECBFC',
            // label和icon的前景色 不活跃状态下(未选中)
            inactiveTintColor: '#aaa',
            // label和icon的背景色 活跃状态下
            activeBackgroundColor: 'white',
            // label和icon的背景色 不活跃状态下
            inactiveBackgroundColor: 'white',
            // 不透明度为按选项卡(iOS和Android < 5.0)
            pressOpacity: 0.3,
            scrollEnabled: false// 是否启用可滚动的选项卡,安卓特有
        }
    }
);

安卓 tabbar 文字会下移,因为安卓比 iOS 多一个属性,就是 iconStyle,通过设置 labelStyle 和 iconStyle 两个样式,可以调整整理合理性。

2、安卓导航栏文字默认居左调整

自定义导航样式,重写:

headerTitleStyle

3、让安卓实现 push 动画

// 先引入这个方法
import CardStackStyleInterpolator from 'react-navigation/src/views/CardStackStyleInterpolator';
​
// 在StackNavigator配置headerMode的地方,使用transitionConfig添加
{
    headerMode: 'screen',
    transitionConfig:()=>({
        screenInterpolator:CardStackStyleInterpolator.forHorizontal,
    })
}

二、iOS 平台专用的:NavigatorIOS

提供 UINavigationViewController 类的方法。其中 Navigator 已经被正式废弃!(于 RN44 被抛弃)

替代方案:react-native-deprecated-custom-components

三、Native 外观和体验的跨端方案:native-navigation, react-native-navigation

其中前者有 AirBnb 团队开发,1.x 前处于不稳定版本。不建议投入正式用途。
后者由 WiX 团队提供。目前功能已经相对完整,功能完全。必须在 RN 0.43 以后才可以用。
如果是混合开发,比如 RN 模块只作为一个 TAB 嵌入,那么可以考虑这种方案。

具体资料如下:https://wix.github.io/react-native-navigation/#/

赞赏

声明: 本文内容由托码斯创作整理,由于知识水平和时效性问题,行文可能存在差错,欢迎留言交流。读者若需转载,请保留出处,谢谢!