React Native(iOS)新手小白零基礎(chǔ)自學(xué)(一)View組件

說(shuō)在前面:

      接觸React Native有一段時(shí)間了到逊,可能我比較笨斯够,網(wǎng)上的教程看了,demo也寫(xiě)了江兢,還有感覺(jué)沒(méi)入門朽褪。于是買了下面這本書(shū)來(lái)正經(jīng)的學(xué)習(xí)躺坟,用簡(jiǎn)書(shū)來(lái)記錄我學(xué)習(xí)的步伐,督促自己罩缴,加油吧!
1C2004B3-6717-42B4-8891-C251753D45E6.png

關(guān)于React Native的基礎(chǔ)配置就自己看書(shū)层扶,或者去看網(wǎng)上的教程靴庆,應(yīng)該問(wèn)題不大(連我這樣的小白都能看懂-_-!!)直接上干貨,書(shū)上第二章先寫(xiě)的攜程的主界面下的九宮格怒医,如下

屏幕快照 2016-04-25 下午4.54.22.png

咱們小白就一步一步來(lái)咯炉抒。 現(xiàn)在我們先來(lái)實(shí)現(xiàn)如下圖所示的界面


53BD97FF-DC41-4B81-9735-92900214915A.png

/*
1.加載View組件
*/

var React = require('react-native');
var {
  AppRegistry,  //負(fù)責(zé)入口組件
  StyleSheet,   //負(fù)責(zé)創(chuàng)建樣式表
  View
} = React;

/*
2.創(chuàng)建組件 使用React.createClass創(chuàng)建一個(gè)組件,即app稚叹,它將作為應(yīng)用程序的入口組件焰薄。
在React.createClass中需要一個(gè)render方法,負(fù)責(zé)渲染視圖(同時(shí)render方法要返回一個(gè)JSX對(duì)象扒袖,可以為null塞茅。
并且該對(duì)象必須有且只有一個(gè)容器對(duì)象包裹)意思就是說(shuō)return回來(lái)的只有一個(gè)對(duì)象,比如下面的三個(gè)view被外面一
個(gè)view包裹
*/

var app = React.createClass({
  render: function(){
    return (
      /*這里做flexbox布局:需要將3個(gè)view組件水平布局并且同事平分屏幕寬度
        style 這個(gè)屬性是所有組件都支持的季率,屬性值為{JavaScript JSON對(duì)象}的形式
        style={styles.container}這里使用的是外部樣式野瘦,還有內(nèi)聯(lián)樣式,以及同時(shí)多個(gè)樣式飒泻,自己百度吧鞭光,沒(méi)什么東西
      */
      <View style={styles.container}>
        <View style={styles.item}></View>
        <View style={styles.item}></View>
        <View style={styles.item}></View>
      </View>
    );
  }
});

/*
3.創(chuàng)建樣式表
container
flex:1 表示將最外層的view組件平鋪占滿整個(gè)屏幕(為啥?等下下面再說(shuō))
borderColor泞遗、borderWidth不用解釋
flexDirection:'row' flexDirection默認(rèn)的布局是縱向‘column’,所以'row'就是水平布局的意思

item
flex:1 這里也是1惰许,有的同學(xué)可能比較懵,flex屬性表示權(quán)重,這里三個(gè)子view的flex都是1史辙,那么就意味著它們?nèi)齻€(gè)的權(quán)重一樣(也就是說(shuō)三個(gè)是一個(gè)等級(jí)的)汹买,那么大家就平分外面的View咯佩伤,怎么平分呢?看上面的flexDirection:'row' 水平分晦毙,這里還限制了height為80生巡,所以就有了三個(gè)等分的高為80
的小方塊了
*/

var styles = StyleSheet.create({
  container: {
    flex:1,
    borderWidth:1,
    borderColor:'red',
    flexDirection:'row',
    backgroundColor:'gray'
  },
  item: {
    flex:1,
    height:80,
    borderWidth:1,
    borderColor:'blue',
    backgroundColor:'red'
  }
});

/*
4.注冊(cè)入口 第一個(gè)InformationServicesRN為項(xiàng)目名稱,第二個(gè)參數(shù)為入口組件對(duì)象 即第二步創(chuàng)建的app對(duì)象
*/

AppRegistry.registerComponent('InformationServicesRN', () => app);

接著我們來(lái)實(shí)現(xiàn)如下圖所示的

10712BF3-7EBD-456F-84D4-95F8915E075A.png
 /*上下兩欄的布局
        這里要加載Text組件见妒,和加載View組件一樣
        然后開(kāi)始布局障斋,在上面的return函數(shù)內(nèi)添加如下代碼
  */
      <View style={styles.container}>
        <View style={[styles.item, styles.center]}>
          <Text>酒店</Text>
        </View>
        <View style={styles.item}>
          <View style={styles.center}>
            <Text>海外酒店</Text>
          </View>
          <View style={styles.center}>
            <Text>特惠酒店</Text>
          </View>
        </View>
        <View style={styles.item}>
          <View style={styles.center}>
            <Text>團(tuán)購(gòu)</Text>
          </View>
          <View style={styles.center}>
            <Text>客棧.公寓</Text>
          </View>
        </View>
      </View>

樣式如下

center: {
    justifyContent:'center',  //垂直居中 實(shí)際上是按照上面的flexDirection方向居中
    alignItems:'center',    //水平居中
    flex:1
  }

接著我們來(lái)處理UI,(背景顏色徐鹤、線條的分割、字體的設(shè)置邀层、圓角處理等)

首先在 第一步中加入PixelRatio

var {
  AppRegistry,  //負(fù)責(zé)入口組件
  StyleSheet,   //負(fù)責(zé)創(chuàng)建樣式表
  View,
  Text,
  PixelRatio    //PixelRatio的get方法可以獲取高清設(shè)備的像素比 如:1/PixelRatio.get()為最小線寬
} = React;

布局函數(shù)中

<View style={styles.container}>
        <View style={[styles.item, styles.center]}>
          <Text style={styles.font}>酒店</Text>
        </View>
        <View style={[styles.item, styles.lineLeftRight]}>
          <View style={[styles.center, styles.lineCenter]}>
            <Text style={styles.font}>海外酒店</Text>
          </View>
          <View style={styles.center}>
            <Text style={styles.font}>特惠酒店</Text>
          </View>
        </View>
        <View style={styles.item}>
          <View style={[styles.center, styles.lineCenter]}>
            <Text style={styles.font}>團(tuán)購(gòu)</Text>
          </View>
          <View style={styles.center}>
            <Text style={styles.font}>客棧.公寓</Text>
          </View>
        </View>
      </View>

樣式函數(shù)

/*
3.創(chuàng)建樣式表
  container
  flex:1   表示將最外層的view組件平鋪占滿整個(gè)屏幕(為啥返敬?等下下面再說(shuō))
  borderColor、borderWidth不用解釋
  flexDirection:'row'  flexDirection默認(rèn)的布局是縱向‘column’,所以'row'就是水平布局的意思
  marginTop:25  距頂部25 marginLeft:5 寥院、marginRight:5 height:84 不用解釋
  borderRadius:5  設(shè)置圓角
  padding:2  設(shè)置內(nèi)邊距 四邊都是2

  item
  flex:1  這里也是1劲赠,有的同學(xué)可能比較懵,flex屬性表示權(quán)重,這里三個(gè)子view的flex都是1秸谢,那么就意味著
          它們?nèi)齻€(gè)的權(quán)重一樣(也就是說(shuō)三個(gè)是一個(gè)等級(jí)的)凛澎,那么大家就平分外面的View咯,怎么平分呢估蹄?看
          上面的flexDirection:'row'  水平分塑煎,這里還限制了height為80,所以就有了三個(gè)等分的高為80
          的小方塊了
*/
var styles = StyleSheet.create({
  container: {
    // flex:1,
    // borderWidth:1,
    // borderColor:'red',
    flexDirection:'row',
    marginTop:25,
    marginLeft:5,
    marginRight:5,
    height:84,
    borderRadius:5,
    backgroundColor:'#FF0067',
    padding:2
  },
  item: {
    flex:1,
    height:80,
    // borderWidth:1,
    // borderColor:'blue',
    // backgroundColor:'red'
  },
  center: {
    justifyContent:'center',
    alignItems:'center',
    flex:1
  },
  font: {
    color:'#fff',
    fontSize:16,
    fontWeight:'bold'
  },
  lineLeftRight: {
    borderLeftWidth:1/PixelRatio.get(),
    borderRightWidth:1/PixelRatio.get(),
    borderColor:'#fff'
  },
  lineCenter: {
    borderBottomWidth:1/PixelRatio.get(),
    borderColor:'#fff'
  }
});

最后實(shí)現(xiàn)的效果:

屏幕快照 2016-04-26 下午1.41.11.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末臭蚁,一起剝皮案震驚了整個(gè)濱河市最铁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌垮兑,老刑警劉巖冷尉,帶你破解...
    沈念sama閱讀 212,383評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異系枪,居然都是意外死亡雀哨,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門私爷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)雾棺,“玉大人,你說(shuō)我怎么就攤上這事衬浑」复澹” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,852評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵嚎卫,是天一觀的道長(zhǎng)嘉栓。 經(jīng)常有香客問(wèn)我宏榕,道長(zhǎng),這世上最難降的妖魔是什么侵佃? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,621評(píng)論 1 284
  • 正文 為了忘掉前任麻昼,我火速辦了婚禮,結(jié)果婚禮上馋辈,老公的妹妹穿的比我還像新娘抚芦。我一直安慰自己,他們只是感情好迈螟,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布叉抡。 她就那樣靜靜地躺著,像睡著了一般答毫。 火紅的嫁衣襯著肌膚如雪褥民。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,929評(píng)論 1 290
  • 那天洗搂,我揣著相機(jī)與錄音消返,去河邊找鬼。 笑死耘拇,一個(gè)胖子當(dāng)著我的面吹牛撵颊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播惫叛,決...
    沈念sama閱讀 39,076評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼倡勇,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了嘉涌?” 一聲冷哼從身側(cè)響起译隘,我...
    開(kāi)封第一講書(shū)人閱讀 37,803評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎洛心,沒(méi)想到半個(gè)月后固耘,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,265評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡词身,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評(píng)論 2 327
  • 正文 我和宋清朗相戀三年厅目,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片法严。...
    茶點(diǎn)故事閱讀 38,716評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡损敷,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出深啤,到底是詐尸還是另有隱情拗馒,我是刑警寧澤,帶...
    沈念sama閱讀 34,395評(píng)論 4 333
  • 正文 年R本政府宣布溯街,位于F島的核電站诱桂,受9級(jí)特大地震影響洋丐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜挥等,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評(píng)論 3 316
  • 文/蒙蒙 一友绝、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧肝劲,春花似錦迁客、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至榄檬,卻和暖如春卜范,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背丙号。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,027評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留缰冤,地道東北人犬缨。 一個(gè)月前我還...
    沈念sama閱讀 46,488評(píng)論 2 361
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像棉浸,于是被迫代替她去往敵國(guó)和親怀薛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評(píng)論 2 350

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