TabBarIOS 簡(jiǎn)單使用

react native 并不是在編譯時(shí)將 JS 代碼編譯成原生代碼,而是在運(yùn)行時(shí)動(dòng)態(tài)解析 JS 轉(zhuǎn)換成原生控件

所以打包時(shí) JS 文件也會(huì)被打包進(jìn)去,android 中 JS 會(huì)被打包到 assets 文件夾下面

bundle.png

無論build ios 包還是 android 包都要保證 packager 服務(wù)一直運(yùn)行, packager 是用來打包資源的,包括所有的 JS 文件,圖片等資源。如果沒有啟動(dòng)可以通過 react-native start命令啟動(dòng)。

packager.png

TabBarIOS

screen.png
// @flow
import React, {
    Component
} from 'react';
import {
    AppRegistry,
    Text,
    View,
    TabBarIOS,
    StyleSheet
} from 'react-native';

export default class HelloReact extends Component {
    state = {
        selectedTab: 'home' // 默認(rèn)選中首頁
    };

    render() {
        return (
          <TabBarIOS
            tintColor='green' // 文字選中顏色
            unselectedTintColor = 'black' // 文字默認(rèn)顏色
           >
           <TabBarIOS.Item
             title = "憑證" // 標(biāo)題
             icon = {require('./images/home.png')} // 默認(rèn)圖標(biāo)
             selectedIcon = {require('./images/home_sel.png')} // 選中圖標(biāo)
             renderAsOriginal={true}
             selected = {this.state.selectedTab === 'home'} // 是否選中
             onPress={() => { 
               this.setState({selectedTab:'home'});
             }}>
             <Text style={styles.content}>互助</Text>
           </TabBarIOS.Item>
            <TabBarIOS.Item
              title = "憑證"
              icon = {require('./images/cert.png')}
              selectedIcon = {require('./images/cert_sel.png')}
              renderAsOriginal={true}
              selected = {this.state.selectedTab === 'cert'}
              onPress={() => {
                this.setState({selectedTab:'cert'});
              }}>
              <Text style={styles.content}>憑證</Text>
            </TabBarIOS.Item>
            <TabBarIOS.Item
              title = "公示"
              icon = {require('./images/notice.png')}
              selectedIcon = {require('./images/notice_sel.png')}
              renderAsOriginal={true}
              selected = {this.state.selectedTab === 'notice'}
              onPress={() => {
                this.setState({selectedTab:'notice'});
              }}>
            <Text style={styles.content}>公示</Text>
            </TabBarIOS.Item>
            <TabBarIOS.Item
              title = "我的"
              icon = {require('./images/profile.png')}
              selectedIcon = {require('./images/profile_sel.png')}
              renderAsOriginal={true}
              selected = {this.state.selectedTab === 'profile'}
              onPress={() => {
                this.setState({selectedTab:'profile'});
              }}>
            <Text style={styles.content}>我的</Text>
            </TabBarIOS.Item>
          < /TabBarIOS>
        );
    }
}

const styles = StyleSheet.create({
  content: {
    marginTop: 20,
  }
});

AppRegistry.registerComponent('HelloReact', () => HelloReact);

ios 中圖片如果沒有 @2x @3x 后綴,放到 tabbar 上會(huì)顯示原圖大小,所有這里圖片要加上后綴。

images.png

@2x @3x 不止能適配 IOS,同時(shí)也會(huì)去適配 android,打包時(shí) packager 會(huì)把不同尺寸的圖片打包到不同分辨率的 drawable 中。 這樣就能對(duì) android 和 ios 進(jìn)行統(tǒng)一處理。

由于 android 中的 TabBar 現(xiàn)在還沒有對(duì)應(yīng)的 react native 控件,所以一般也會(huì)使用第三方的跨平臺(tái)控件。 因?yàn)槌?TabBar 一般還要處理頁面跳轉(zhuǎn),所以用 React Navigation 可以全部搞定。

Demo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,893評(píng)論 25 709
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,161評(píng)論 4 61
  • WebSocket-Swift Starscream的使用 WebSocket 是 HTML5 一種新的協(xié)議。它實(shí)...
    香橙柚子閱讀 24,725評(píng)論 8 183
  • 暑假的一天早上,我和我的伙伴一起上山采菌子,一路上我的心情激動(dòng)不已!我們的采菌之旅開始啦! 到了山...
    60e0a3723a5c閱讀 823評(píng)論 0 2
  • 導(dǎo)航 Android Paint之顏色過濾器 Paint之shader(圖像渲染) Paint之PathEffec...
    侯蛋蛋_閱讀 2,980評(píng)論 0 2

友情鏈接更多精彩內(nèi)容