美文网首页
DrawerNavigator嵌套stackNavigator嵌

DrawerNavigator嵌套stackNavigator嵌

作者: ashlgs | 来源:发表于2019-04-17 17:33 被阅读0次

    DrawerNavigator嵌套stackNavigator嵌套BottomTabNavigator,实现侧滑栏包含tab导航栏并可跳转其他路由页面.

    最外层DrawerNavigation部分主要代码:

    const CustomDrawerContentComponent = (props) => (

        <CustomDrawerComponent mProps = {props}/>

    );

    class CustomDrawerComponent extends React.Component{

        constructor(props) {

            super(props)

            this.state={

                mZIndex:0

            }

    }

        onScroll(e){

            let scrollY = e.nativeEvent.contentOffset.y;//滑动的偏移量,

            console.log(scrollY)

            if(scrollY > 130 && this.state.mZIndex!= 9){

                this.setState({

                    mZIndex:9

                })

                return

            }

            if(scrollY <= 130 && this.state.mZIndex != 0) {

                this.setState({

                    mZIndex:0

                })

    }

    }

        render(){

            return (<SafeAreaView style={{flex: 1}}>

                <View style={{position:'absolute',zIndex:this.state.mZIndex,width:'100%',height:50,backgroundColor:'orange'}}></View>

                <ScrollView onScroll={(e)=>{

                    this.onScroll(e)

    }}>

                    <SafeAreaView style={styles.container} forceInset={{top: 'always', horizontal: 'never'}}

    >

                        <View style={{width: '100%', height: 180, backgroundColor: '#FB7298'}}>

                            <View style={styles.horizontalHeader}>

                                <Image style={styles.iconHeader} source={require('./image/icon_head.jpg')}/>

                                <Image style={styles.headerRight} source={require('./image/scan.png')}/>

                            </View>

                            <View style={styles.horizontalNick}>

                                <Text style={styles.nickName}>ashlgs</Text>

                                <Text style={styles.level}>lv3</Text>

                                <Text style={styles.prince}>正式会员</Text>

                            </View>

                        </View>

    {

    }

                        <DrawerItems {...this.props.mProps} />

                        <DrawerItems {...this.props.mProps} />

                        <DrawerItems {...this.props.mProps} />

                        <DrawerItems {...this.props.mProps} />

                        <DrawerItems {...this.props.mProps} />

                        <DrawerItems {...this.props.mProps} />

                        <DrawerItems {...this.props.mProps} />

                        <DrawerItems {...this.props.mProps} />

                        <DrawerItems {...this.props.mProps} />

                        <DrawerItems {...this.props.mProps} />

                        <DrawerItems {...this.props.mProps} />

                        <DrawerItems {...this.props.mProps} />

                  {/*   

                        <DrawerItems {...props} />*/}

                    </SafeAreaView>

                </ScrollView>

                <View style={styles.bottomContainer}>

                    <View style={styles.bottomItemContainer}>

                        <Image style={styles.bottomIcon} source={require('./image/setting.png')}/>

                        <Text> 设置</Text>

                    </View>

                    <View style={styles.bottomItemContainer}>

                        <Image style={styles.bottomIcon} source={require('./image/main_title.png')}/>

                        <Text> 主题</Text>

                    </View>

                    <View style={styles.bottomItemContainer}>

                        <Image style={styles.bottomIcon} source={require('./image/night.png')}/>

                        <Text> 夜间</Text>

                    </View>

                </View>

            </SafeAreaView>

    )

    }

    }

    //this.props.navigation.openDrawer();//打开抽屉

    //this.props.navigation.closeDrawer();//关闭抽屉

    const MyDrawerNavigator = createDrawerNavigator({

        Main: {

            screen: Stack

    },

        Set: {

            screen: Setting

        },

    }, {

        order: ['Main','Set'  ],//routeNames数组,用于定义抽屉项目的顺序。

        initialRouteName: 'Main',//初始路由的routeName。

        drawerLockMode:'unlocked',  //here

        // drawerLockMode: 'unlocked',//设置是否响应手势

        //允许使用返回手势

        gesturesEnabled: true,

        //'unlocked'  可以通过手势和代码 打开关闭抽屉

        //'locked-closed' 抽屉关闭状态  不能通过手势打开  只能通过代码实现

        //'locked-open'  抽屉打开状态  不能通过手势关闭  只能通过代码实现

        drawerWidth: 300, //抽屉的宽度或返回的功能。

        drawerPosition: 'left', //选项是left或right。默认是left位置。

        useNativeAnimations: false, //启用原生动画。默认是true。

        drawerBackgroundColor: 'white', //使用抽屉背景获取某种颜色。默认是white。

        //用于呈现抽屉内容的组件,例如导航项。收到navigation抽屉的道具。默认为DrawerItems

        //用于自定义

        //contentComponent: '',

        contentComponent: CustomDrawerContentComponent,

        //配置抽屉内容  /*********************************************************************************items相关************************************/

        contentOptions: {

            activeTintColor: '#FB7299', //活动标签的标签和图标颜色

            activeBackgroundColor: '#E9E9E9', //活动标签的背景颜色

            inactiveTintColor: '#7F7F7F', //非活动标签的标签和图标颜色

            inactiveBackgroundColor: 'white', //非活动标签的背景颜色

            itemsContainerStyle: {

                width: '100%',

            },

            itemStyle: {

                // width:'100%',

            }

    }

    })

    export default MyDrawerNavigator;


    Stack部分:

    import Reactfrom 'react'

    import {createStackNavigator} from 'react-navigation'

    import Register from "./pages/register/Register";

    import AccountLogin from "./pages/login/AccountLogin";

    import SmsLogin from "./pages/login/SmsLogin";

    import RegisterNext from "./pages/register/RegisterNext";

    import FindPasswordScreen from "./pages/password/FindPasswordScreen";

    import TermsScreen from "./pages/register/TermsScreen";

    import ResetPasswordScreen from "./pages/password/ResetPasswordScreen";

    import TabNavigatorfrom "./TabNavigator";

    export default Stack = createStackNavigator({

        Home:{

            screen:TabNavigator,

            navigationOptions: {

                header: null,

            }

        },

        AccountRegister: {

            // screen: RegisterScreen,

            screen: Register,

            navigationOptions: {

                header: null

            }

        },

        AccountLogin: {

            screen: AccountLogin,

            navigationOptions: {

                header: null,

                drawerLockMode:'unlocked',  //here

            }

        },

        SmsLogin: {

            screen: SmsLogin,

            navigationOptions: {

                header: null

            }

        },

        AccountRegisterNext: {

            screen: RegisterNext,

            navigationOptions: {

                header: null

            }

        },

        FindPassword: {

            screen: FindPasswordScreen,

            navigationOptions: {

                header: null

            }

        },

        TermsScreen: {

            screen: TermsScreen,

            navigationOptions: {

                header: null

            }

        },

        ResetPassword: {

            screen: ResetPasswordScreen,

            navigationOptions: {

                header: null

            }

        },

    },{            drawerLockMode:'unlocked',  //here

    })



    BottomTabNavigator部分:

    export default MainTab = createBottomTabNavigator({

        Home: {

            screen: Home,

            navigationOptions: ({navigation, screeProps}) => ({

                //这里设置StackNavigator属性和一般情况下Tabbar不同页面可能会不同的属性

                //设置StackNavigator属性

                header: null,

                headerTitle: '首页',

                headerStyle: styles.navigator,

                headerTitleStyle: styles.navigatorTitle,

                gesturesEnabled: true,

                drawerLockMode: 'unlocked',

                //这里设置Tabbar不同页面可能会不同的属性

                tabBarVisible: true,

                tabBarLabel: '首页',

                tabBarIcon: (({tintColor, focused}) => {

                    return (

                        <Image

                            source={focused? MainTabSelectedIcon : MainTabUnSelectedIcon}

                            style={styles.tabbarImage}

    />

    )

                }),

            })

        },

        Video: {

            screen: Video,

            navigationOptions: ({navigation, screeProps}) => ({

                //这里设置StackNavigator属性和一般情况下Tabbar不同页面可能会不同的属性

                //设置StackNavigator属性

                header: null,

                headerTitle: '视频',

                headerStyle: styles.navigator,

                headerTitleStyle: styles.navigatorTitle,

                gesturesEnabled: true,

                //这里设置Tabbar不同页面可能会不同的属性

                tabBarVisible: true,

                tabBarLabel: '视频',

                tabBarIcon: (({tintColor, focused}) => {

                    return (

                        <Image

                            source={focused? VideoTabSelectedIcon : VideoTabUnSelectedIcon}

                            style={styles.tabbarImage}

    />

    )

                }),

            })

        },

        SmallVideo: {

            screen: SmallVideo,

            navigationOptions: ({navigation, screeProps}) => ({

                //这里设置StackNavigator属性和一般情况下Tabbar不同页面可能会不同的属性

                //设置StackNavigator属性

                header: null,

                headerTitle: '小视频',

                headerStyle: styles.navigator,

                headerTitleStyle: styles.navigatorTitle,

                gesturesEnabled: true,

                //这里设置Tabbar不同页面可能会不同的属性

                tabBarVisible: true,

                tabBarLabel: '小视频',

                tabBarIcon: (({tintColor, focused}) => {

                    return (

                        <Image

                            source={focused? SmallVideoTabSelectedIcon : SmallVideoTabUnSelectedIcon}

                            style={styles.tabbarImage}

    />

    )

                }),

            })

        },

        QA: {

            screen: QA,

            navigationOptions: ({navigation, screeProps}) => ({

                //这里设置StackNavigator属性和一般情况下Tabbar不同页面可能会不同的属性

                //设置StackNavigator属性

                header: null,

                headerTitle: '问答',

                headerStyle: styles.navigator,

                headerTitleStyle: styles.navigatorTitle,

                gesturesEnabled: true,

                //这里设置Tabbar不同页面可能会不同的属性

                tabBarVisible: true,

                tabBarLabel: '问答',

                tabBarIcon: (({tintColor, focused}) => {

                    return (

                        <Image

                            source={focused? QATabSelectedIcon : QATabUnSelectedIcon}

                            style={styles.tabbarImage}

    />

    )

                }),

            })

    }

    }, {

        //这里设置的是一般情况下Tabbar共同的属性

        tabBarPosition: 'bottom', // 设置tabbar的位置,iOS默认在底部,安卓默认在顶部。(属性值:'top','bottom')

        swipeEnabled: true, // 是否允许在标签之间进行滑动。

        animationEnabled: false, // 是否在更改标签时显示动画。

        lazy: true, // 是否根据需要懒惰呈现标签,而不是提前制作,意思是在app打开的时候将底部标签栏全部加载,默认false,推荐改成true哦。

        initialRouteName: '', // 设置默认的页面组件

        backBehavior: 'none', // 按 back 键是否跳转到第一个Tab(首页), none 为不跳转

        tabBarOptions: {

            activeTintColor: '#d81e06', // label和icon的前景色 活跃状态下(选中)。

            inactiveTintColor: '#515151', // label和icon的前景色 不活跃状态下(未选中)。

            labelStyle: {

                fontSize: 12,

            }, //label的样式。

        }

    })

    相关文章

      网友评论

          本文标题:DrawerNavigator嵌套stackNavigator嵌

          本文链接:https://www.haomeiwen.com/subject/loanwqtx.html