[React Native]react-native-scrollable-tab-view(入門篇)

官方為我們提供的Tab控制器有兩種:
TabBarIOS戒劫,僅適用于IOS平臺
ViewPagerAndroid半夷,僅適用于Android平臺(嚴格來講并不算,因為我們還需要自己實現(xiàn)Tab)

如果我們需要一個更通用的Tab控制器迅细,那么就要借助開源的力量巫橄,本篇文章教你如何使用
react-native-scrollable-tab-view,這是官方Demo的效果

demo.gif
demo-fb.gif

一茵典、準備工作

  1. 新建一個項目
    react-native init Demo6
  2. 添加react-native-scrollable-tab-view
    npm install react-native-scrollable-tab-view --save

二湘换、Props介紹

  • renderTabBar(Function:ReactComponent)
    TabBar的樣式,系統(tǒng)提供了兩種默認的统阿,分別是DefaultTabBarScrollableTabBar彩倚。當然,我們也可以自定義一個扶平,我們會在下篇文章重點講解如何去自定義TabBar樣式署恍。
    render() {
    return (
    <ScrollableTabView
    renderTabBar={() => <DefaultTabBar/>}>
    <Text tabLabel='Tab1'/>
    <Text tabLabel='Tab2'/>
    <Text tabLabel='Tab3'/>
    <Text tabLabel='Tab4'/>
    <Text tabLabel='Tab5'/>
    <Text tabLabel='Tab6'/>
    </ScrollableTabView>
    );
    }
    注意:每個被包含的子視圖需要使用tabLabel屬性,表示對應(yīng)Tab顯示的文字
    DefaultTabBar:Tab會平分在水平方向的空間

    default.png

    ScrollableTabBar:Tab可以超過屏幕范圍蜻直,滾動可以顯示
    scrollable.png

  • tabBarPosition(String,默認值'top')
    render() {
    return (
    <ScrollableTabView
    tabBarPosition='top'
    renderTabBar={() => <DefaultTabBar/>}>
    ...
    </ScrollableTabView>
    );
    }
    top:位于屏幕頂部

    default.png

    bottom:位于屏幕底部
    bottom.png

    overlayTop:位于屏幕頂部袁串,懸浮在內(nèi)容視圖之上(看顏色區(qū)分:視圖有顏色概而,Tab欄沒有顏色)
    overlayTop.png

    overlayBottom:位于屏幕底部,懸浮在內(nèi)容視圖之上(看顏色區(qū)分:視圖有顏色囱修,Tab欄沒有顏色)
    overlayBottom.png

  • onChangeTab(Function)
    Tab切換之后會觸發(fā)此方法赎瑰,包含一個參數(shù)(Object類型),這個對象有兩個參數(shù)
    i:被選中的Tab的下標(從0開始)
    ref:被選中的Tab對象(基本用不到)
    render() {
    return (
    <ScrollableTabView
    renderTabBar={() => <DefaultTabBar/>}
    onChangeTab={(obj) => {
    console.log('index:' + obj.i);
    }
    }>
    ...
    </ScrollableTabView>
    );
    }

  • onScroll(Function)
    視圖正在滑動的時候觸發(fā)此方法破镰,包含一個Float類型的數(shù)字餐曼,范圍是[0, tab數(shù)量-1]
    render() {
    return (
    <ScrollableTabView
    renderTabBar={() => <DefaultTabBar/>}
    onScroll={(postion) => {
    // float類型 [0, tab數(shù)量-1]
    console.log('scroll position:' + postion);
    }
    }>
    ...
    </ScrollableTabView>
    );
    }

  • locked(Bool,默認為false)
    表示手指是否能拖動視圖鲜漩,默認為false(表示可以拖動)源譬。設(shè)為true的話,我們只能“點擊”Tab來切換視圖孕似。
    render() {
    return (
    <ScrollableTabView
    locked={false}
    renderTabBar={() => <DefaultTabBar/>}>
    ...
    </ScrollableTabView>
    );
    }

  • initialPage(Integer)
    初始化時被選中的Tab下標踩娘,默認是0(即第一頁)
    render() {
    return (
    <ScrollableTabView
    initialPage={1}
    renderTabBar={() => <DefaultTabBar/>}>
    ...
    </ScrollableTabView>
    );
    }

2016.12.12更新:react-native-scrollable-tab-view最新版本0.7.0,此屬性在Android平臺無效喉祭,具體表現(xiàn)為頁面不會被“渲染”养渴,但是iOS平臺是沒問題的雷绢。建議大家暫時使用0.6.0,作者表示已經(jīng)準備修復此問題理卑,詳見:https://github.com/skv-headless/react-native-scrollable-tab-view/issues/483

  • page(Integer)
    設(shè)置選中指定的Tab(然而測試下來并沒有任何效果翘紊,知道原因的同學麻煩留言下 ~)

寫于2016.06.29:跟作者溝通下來下個版本打算廢棄這個屬性,原話為‘It is a legacy I would like to remove it but someone might use it. Probably in next version I'll remove it.’參考issue#320

  • children(ReactComponents)
    表示所有子視圖的數(shù)組藐唠,比如下面的代碼帆疟,children則是一個長度為6的數(shù)組,元素類型為Text
    render() {
    return (
    <ScrollableTabView
    renderTabBar={() => <DefaultTabBar/>}>
    <Text tabLabel='Tab1'/>
    <Text tabLabel='Tab2'/>
    <Text tabLabel='Tab3'/>
    <Text tabLabel='Tab4'/>
    <Text tabLabel='Tab5'/>
    <Text tabLabel='Tab6'/>
    </ScrollableTabView>
    );
    }

  • tabBarUnderlineStyle(style)
    設(shè)置DefaultTabBarScrollableTabBarTab選中時下方橫線的顏色

  • tabBarBackgroundColor(String)
    設(shè)置整個Tab這一欄的背景顏色

  • tabBarActiveTextColor(String)
    設(shè)置選中Tab的文字顏色

  • tabBarInactiveTextColor(String)
    設(shè)置未選中Tab的文字顏色

  • tabBarTextStyle(Object)
    設(shè)置Tab文字的樣式中捆,比如字號鸯匹、字體等
    上面這5個樣式示例如下

    render() {
      return (
        <ScrollableTabView
          renderTabBar={() => <DefaultTabBar />}
          tabBarUnderlineStyle={{backgroundColor:'#FF0000'}}
          tabBarBackgroundColor='#FFFFFF'
          tabBarActiveTextColor='#9B30FF'
          tabBarInactiveTextColor='#7A67EE'
          tabBarTextStyle={{fontSize: 18}}
        >
        ...
        </ScrollableTabView>
      );
    }
    
    top5.png
  • style(View.propTypes.style)
    系統(tǒng)View都擁有的屬性,基本不會涉及到泄伪。

  • contentProps(Object)
    這里要稍微說下react-native-scrollable-tab-view的實現(xiàn)殴蓬,其實在Android平臺底層用的是ViewPagerAndroid,iOS平臺用的是ScrollView蟋滴。這個屬性的意義是:比如我們設(shè)置了某個屬性染厅,最后這個屬性會被應(yīng)用在ScrollView/ViewPagerAndroid,這樣會覆蓋庫里面默認的津函,通常官方不建議我們?nèi)ナ褂谩?/p>

  • scrollWithoutAnimation(Bool肖粮,默認為false)
    設(shè)置“點擊”Tab時,視圖切換是否有動畫尔苦,默認為false(即:有動畫效果)涩馆。
    render() {
    return (
    <ScrollableTabView
    scrollWithoutAnimation={true}
    renderTabBar={() => <DefaultTabBar/>}>
    ...
    </ScrollableTabView>
    );
    }
    注意:這個屬性的設(shè)置對滑動視圖切換的動畫效果沒有影響,僅僅對“點擊”Tab效果有作用允坚』昴牵看下下面動態(tài)圖的對比(今天錄得動態(tài)圖不知道為啥抽瘋了,調(diào)了好幾遍都不行稠项,湊合看吧~)

    click.gif

    slide.gif

好了涯雅,感謝大家耐心看到最后,下篇文章會介紹react-native-scrollable-tab-view如何去自定義一個TabBar樣式展运。感興趣的朋友請繼續(xù)閱讀[React Native]react-native-scrollable-tab-view(進階篇)活逆。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市拗胜,隨后出現(xiàn)的幾起案子蔗候,更是在濱河造成了極大的恐慌,老刑警劉巖挤土,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件琴庵,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機迷殿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門儿礼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人庆寺,你說我怎么就攤上這事蚊夫。” “怎么了懦尝?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵知纷,是天一觀的道長。 經(jīng)常有香客問我陵霉,道長琅轧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任踊挠,我火速辦了婚禮乍桂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘效床。我一直安慰自己睹酌,他們只是感情好,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布剩檀。 她就那樣靜靜地躺著憋沿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪沪猴。 梳的紋絲不亂的頭發(fā)上辐啄,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天,我揣著相機與錄音运嗜,去河邊找鬼则披。 笑死,一個胖子當著我的面吹牛洗出,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播图谷,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼翩活,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了便贵?” 一聲冷哼從身側(cè)響起菠镇,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎承璃,沒想到半個月后利耍,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年隘梨,在試婚紗的時候發(fā)現(xiàn)自己被綠了程癌。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡轴猎,死狀恐怖嵌莉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情捻脖,我是刑警寧澤锐峭,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站可婶,受9級特大地震影響沿癞,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜矛渴,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一椎扬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧曙旭,春花似錦盗舰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至剂习,卻和暖如春蛮位,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鳞绕。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工失仁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人们何。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓萄焦,卻偏偏與公主長得像,于是被迫代替她去往敵國和親冤竹。 傳聞我的和親對象是個殘疾皇子拂封,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容