• React Navigation / React Native Navigation 多种类型的导航结合使用,构造合理回退栈


    React Navigation 更新到版本5已经是非常完善的一套导航管理组件, 提供了Stack , Tab , Drawer 导航方式 , 那么我们应该怎样设计和组合应用他们来构建一个完美的回退栈呢?

    1 . 确定APP的整体风格,国外偏好使用Drawer布局, 但到了国内就很少被使用

    2. 每个导航也是一个component, 可以作为另外一个导航的一个页面

    其他的具体使用参考官网即可

    import {createAppContainer} from 'react-navigation';
    import {createBottomTabNavigator} from 'react-navigation-tabs';
    import * as React from 'react';
    import MineTabNavigator from '../screens/Mine/MineTabNavigator';
    import DashboardTabNavigator from '../screens/Dashboard/DashboardTabNavigator';
    import DeviceTabNavigator from '../screens/Device/DeviceTabNavigator';
    import {MaterialTgitopTabNavigator} from '../screens/Organization/OrgTreeScreen';
    import {createStackNavigator} from 'react-navigation-stack';
    import NotificationTabNavigator from '../screens/Notification/NotificationTabNavigator';
    import SplashScreen from '../screens/Splash/SplashScreen';
    import LoginScreen from '../screens/Mine/Login/LoginScreen';
    import Svg from '../components/Svg/svg';/**
     * 配置底部标签
     */
    const Tab = createBottomTabNavigator({
        //每一个页面的配置
        DashboardScreen: {
            screen: DashboardTabNavigator,
            navigationOptions: {
                //stackNavigator的属性
                gestureResponseDistance: {horizontal: 300},
                headerBackTitle: null,
                headerStyle: {backgroundColor: '#FFFFFF'},//导航栏的样式
                //tab 的属性
                tabBarLabel: '首页',
                tabBarIcon: ({focused, horizontal, tintColor}) => (
                    <Svg icon="abb_home_24" color={tintColor}/>
                ),
            },
        },
        NotificationTab: {
            screen: NotificationTabNavigator,
            navigationOptions: {
                //stackNavigator的属性
                headerTitle: '通知',
                gestureResponseDistance: {horizontal: 300},
                headerBackTitle: null,
                headerStyle: {backgroundColor: '#FFFFFF'},//导航栏的样式
                headerTitleStyle: {
                    color: '#686868',
                    fontSize: 16,
                    fontFamily: 'ABBvoiceCNSG-Regular',
                },
                //tab 的属性
                tabBarLabel: '消息',
                tabBarIcon: ({focused, horizontal, tintColor}) => (
                    <Svg icon="abb_alarm-bell_24" color={tintColor}/>
                ),
            },
        },
        MineTab: {
            screen: MineTabNavigator,
            navigationOptions: {
                //stackNavigator的属性
                headerTitle: '我的',
                gestureResponseDistance: {horizontal: 300},
                headerBackTitle: null,
                headerStyle: {
                    backgroundColor: '#FFFFFF',
                },//导航栏的样式
                headerTitleStyle: {
                    color: '#686868',
                    fontSize: 16,
                    fontFamily: 'ABBvoiceCNSG-Regular',
                    height: 48,
                },
                //tab 的属性
                tabBarLabel: '我的',
                tabBarIcon: ({focused, horizontal, tintColor}) => (
                    <Svg icon="abb_user_24" color={tintColor}/>
                ),
            },
        },
    
    }, {
        //设置TabNavigator的位置
        tabBarPosition: 'bottom',
        //是否在更改标签时显示动画
        animationEnabled: true,
        //是否允许在标签之间进行滑动
        swipeEnabled: true,
        //按 back 键是否跳转到第一个Tab(首页), none 为不跳转
        backBehavior: 'false',
        //设置Tab标签的属性
    
        tabBarOptions: {
            //Android属性
            upperCaseLabel: false,//是否使标签大写,默认为true
            //共有属性
            showIcon: true,//是否显示图标,默认关闭
            showLabel: true,//是否显示label,默认开启
            activeTintColor: '#3366FF',//label和icon的前景色 活跃状态下(选中)
            inactiveTintColor: '#1F1F1F',//label和icon的前景色 活跃状态下(未选中)
            style: { //TabNavigator 的背景颜色
                backgroundColor: 'white',
                height: 55,
            },
            indicatorStyle: {//标签指示器的样式对象(选项卡底部的行)。安卓底部会多出一条线,可以将height设置为0来暂时解决这个问题
                height: 0,
            },
            labelStyle: {//文字的样式
                fontSize: 13,
                marginTop: -5,
                marginBottom: 5,
            },
            iconStyle: {//图标的样式
                marginBottom: 5,
            },
        },
    });
    
    Tab.navigationOptions = ({navigation}) => ({
        header: null,
    });
    
    const RootStack = createStackNavigator(
        {
            Splash: SplashScreen,
            Tab: Tab,
            Login: LoginScreen,
            Logout: LogoutScreen,
            Notification: NotificationScreen,
            //-------------------
        },
        {
            initialRouteName: 'Splash',
            // mode: 'modal',
            // // 用于设置安卓卡片式跳转
            // // transitionConfig: () => ({
            // //   screenInterpolator: StackViewStyleInterpolator.forHorizontal,
            // // }),
            // navigationOptions: () => ({
            //     gesturesEnabled: true,
            // }),
            // // 默认导航头样式设置
            // defaultNavigationOptions: {
            //     header: null,
            // },
            headerLayoutPreset: 'center',
        },
    );
    
    export default AppContainer = createAppContainer(RootStack);
    
  • 相关阅读:
    Algs4-1.4DoublingRatio
    Algs4-1.4TwoSumFast
    Algs4-1.4ThreeSumFast
    Algs4-1.4ThreeSum
    Algs4-1.4TwoSum
    Algs4-1.3.50快速出错的迭代器
    *Algs4-1.3.49栈与队列-(未解决)
    Algs4-1.3.4X栈与队列-两个栈实现一个队列均摊O(1)
    Algs4-1.3.47可连接的队列、栈或steque
    Java的垃圾回机机制(见过讲得最清楚的)
  • 原文地址:https://www.cnblogs.com/gloryhope/p/12733781.html
Copyright © 2020-2023  润新知