React Native带你实现scrollable-tab-view(五)

本文介绍如何在React Native中实现scrollable-tab-view,通过使用scrollview包裹tab来实现滚动效果。通过动画控制底部线条的长度和位置,以达到跟随页面滑动的效果。在遇到特殊情况如最后一个tab时,进行了相应的逻辑处理,最终成功实现在滑动和点击时线条正确指向。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一节React Native带你实现scrollable-tab-view(三)中我们最后实现了我们scrollable-tab-view的效果为:
这里写图片描述

比如有很多页面,我们的tabview需要跟随scrollview的滑动而滑动:

这里写图片描述

我们现在用的还是默认的tabview,比如我们多加一些页面,
这里写图片描述
这样肯定不行,我们需要的是上面的那种效果,所以每个view的flex=1这种模式肯定不适合了,我们需要用一个scrollview去包涵tab,使它也能滑动,所以也算是scrollable-tab-view的一个难点了,好啦~ 我们来一步一步实现一下scrollable-tab-view中的ScrollableTabBar.js。

我们先创建一个view叫ScrollableTabBar.js:

/**
 * @author YASIN
 * @version [React-Native Pactera V01, 2017/9/7]
 * @date 17/2/23
 * @description ScrollableTabBar
 */
import React, {
    Component
} from 'react';
import {
    View,
    Text,
    StyleSheet,
} from 'react-native';
export default class ScrollableTabBar extends Component {
   
   
    // 构造
    constructor(props) {
        super(props);
        // 初始状态
        this.state = {};
    }

    render() {
        return (
            <View>
                <Text>ScrollableTabBar</Text>
            </View>
        );
    }
}
const styles = StyleSheet.create({
    container: {}
});

然后替换掉index文件中的DefaultTabBar组件:

  /**
     * 渲染tabview
     * @private
     */
    _renderTabView() {
        let tabParams = {
            tabs: this._children().map((child)=>child.props.tabLabel),
            activeTab: this.state.currentPage,
            scrollValue: this.state.scrollValue,
            containerWidth: this.state.containerWidth,
        };
        return (
            <ScrollableTabBar
                {...tabParams}
                style={[{width: this.state.containerWidth}]}
                onTabClick={(page)=>this.goToPage(page)}
            />
        );
    }

这里写图片描述

然后我们开始实现ScrollableTabBar组件:

我们用一个scrollview去包裹tab,然后其它的东西直接copy一份DefaultTabBar的内容:

/**
 * @author YASIN
 * @version [React-Native Pactera V01, 2017/9/7]
 * @date 17/2/23
 * @description ScrollableTabBar
 */
import React, {
    Component
} from 'react';
im
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值