美文网首页
TabNavigator自定义Tab

TabNavigator自定义Tab

作者: IDO0 | 来源:发表于2017-10-19 14:53 被阅读0次

react navigation三种导航,其中TabNavigation和StackNavigation用的比较多。今天要说的就是关于TabNavigation的样式问题,可能很多人都遇到过为什么明明设置了style和tabStyle还是会有问题。
我想可能会有很多人这样写:

const tabbaroption = {
    activeTintColor: Color.f3474b,
    inactiveTintColor: Color.C7b7b7b,
    showIcon: true,
    style: {
        backgroundColor:'white'
    },
    indicatorStyle: {
        opacity: 0
    },
    iconStyle:{
        paddingTop:0,
        padding:0,
        marginTop:0,
        width:SCALE(45),
        height:SCALE(45),
    },
    labelStyle:{
        marginTop:0,
        padding:0,
    },
    tabStyle: {
        height:Platform.OS==='ios'?SCALE(90):SCALE(100),
        alignItems:'center',
        justifyContent:'center',

    }
};
//我发起的请假选项
const LeaveListIndex = TabNavigator(
    {
        LeaveUnCheckList: { screen: LeaveUnCheckList },
        LeaveFinished:{screen: LeaveFinished}
    },
    {
        lazy: true,
        tabBarPosition: 'bottom',
        animationEnabled: true,
        tabBarOptions: tabbaroption,
        headerLeft:null,
    });

然后满心欢喜的以为图片和文字会居中,然而残酷的现实告诉我们并不是这样。得到的结果大概是这样的。


tabstyle.png

这个时候你可能会设置各种背景颜色,设置margin,设置padding距离,然后发现终于成功了,在其他机型运行时又tm出现适配问题。哈哈哈哈。
所以今天我们就自己定义一个tab替换掉默认的。
修改代码:

const LeaveListIndex = TabNavigator(
    {
        LeaveUnCheckList: { screen: LeaveUnCheckList },
        LeaveFinished:{screen: LeaveFinished}
    },
    {
        lazy: true,
        tabBarComponent:props => <Tab {...props}/>,
        tabBarPosition: 'bottom',
        animationEnabled: true,
        tabBarOptions: tabbaroption,
        headerLeft:null,
    });

自定义的Tab:

export default class Tab extends Component {
    renderItem = (route, index) => {
        const {
            navigation,
            jumpToIndex,
        } = this.props;

        const focused = index === navigation.state.index;
        const color = focused ? this.props.activeTintColor : this.props.inactiveTintColor;
        let TabScene = {
            focused:focused,
            route:route,
            tintColor:color
        };
        return (
            <TouchableOpacity
                key={route.key}
                style={styles.tabItem}
                onPress={() => jumpToIndex(index)}
            >
                <View
                    style={styles.tabItem}>
                    {this.props.renderIcon(TabScene)}
                    <Text style={{ ...styles.tabText,marginTop:SCALE(10),color }}>{this.props.getLabel(TabScene)}</Text>
                </View>
            </TouchableOpacity>
        );
    };
    render(){
        const {navigation,} = this.props;
        const {routes,} = navigation.state;
        return (
            <View style={styles.tab}>
                {routes && routes.map((route,index) => this.renderItem(route, index))}
            </View>
        );
    }
}
const styles = {
    tab:{
        borderTopWidth:StyleSheet.hairlineWidth,
        borderTopColor:Color.dddddd,
        width:WIDTH,
        height: Platform.OS==='ios'?SCALE(90):SCALE(100),
        backgroundColor:'white',
        flexDirection:'row',
        justifyContent:'space-around',
        alignItems:'center'
    },
    tabItem:{
        width:SCALE(100),
        alignItems:'center',
        justifyContent:'center'
    },
    tabText:{
        marginTop:SCALE(13),
        fontSize:FONT(10),
        color:Color.C7b7b7b
    },
    tabTextChoose:{
        color:Color.f3474b
    },
    tabImage:{
        width:SCALE(42),
        height:SCALE(42),
    },
}

然后一切都好了,世界安静了。


tabright.png

相关文章

网友评论

      本文标题:TabNavigator自定义Tab

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