热门搜索 :
考研考公
您的当前位置:首页正文

iOS-React Native学习04-FlexBox布局

来源:东饰资讯网
Snip20160801_4.png

1.FlexBox布局干什么的?

FlexBox就是处理子View和父View之间的关系的.
什么关系? 位置关系 尺寸关系.
说子View在父View的什么位置啊?子View有多宽多高呢....

2.FlexBox布局哪来的?

是针对web和移动开发布局而搞出来.不只是针对手机这些移动开发.浏览器当然也是支持的.

3.React Native的FlexBox?

React Native的FlexBox, 是FlexBox布局规范的一个子集.

4. FlexBox在React Native开发中能解决什么问题?

  • 水平和垂直居中
  • 自动分配宽度
  • 各种机型屏幕的适配
  • 浮动布局

5. FlexBox的核心思想

方向问题.
什么方向? -------布局方向
有什么布局方向?------主轴方向和侧轴方向

  • 1.如图红色View的主轴方向是纵向的,子View(黄色View)就是纵向布局的


    Snip20160801_6.png
  • 2.如图黑色view的主轴方向是横向的,自View(黄色view)的布局就是横向的


    Snip20160801_7.png

6.FlexBox的常用属性

有哪些常见属性?-----容器属性+元素属性
6.1容器属性

  • ①.决定主轴的方向-flexDirection

    • row: 主轴为水平方向, 起点由左端开始
    • row-reverse: 主轴为水平方向. 起点由右端开始
    • column(默认值): 主轴为纵轴方向, 起点在最上面
    • column-reverse: 主轴为纵轴方向, 起点在最下面
Snip20160801_8.png

// 部分代码


class ViewDemo extends Component { 
 render() {    
    return (     
       <View style={styles.container}>       
          <View style={styles.childViewStyle}> 
                   <Text>            第一个View          </Text>        
           </View>        
          <View style={styles.childViewStyle2}>         
               < Text>            第二个View          </Text>       
          </View>        
          <View style={styles.childViewStyle}>          
                <Text>            第三个View          </Text>        
            </View>      
         </View>    );  }
}

const styles = StyleSheet.create({  
container: {    
width:300,   
 height:500,    
backgroundColor: '#F5EEF5',   
 flexDirection:'row'
  },  
childViewStyle:{    
backgroundColor:'#F5FFEE',    
width:88,    
height:50  
},  
childViewStyle2:{    
backgroundColor:'#F5FFFE',    
width:88,    
height:50  
}
});
Snip20160801_15.png
  • ②.决定子控件在主轴的对齐方式-justifyContent
    当前主轴方向为row

  • flex-start(默认):向起始位置靠齐

Snip20160801_25.png
    • flex-end: 向结束位置靠齐
Snip20160801_23.png
  • center: 向中间位置靠齐
Snip20160801_21.png
  • space-between: 向两端对齐, 控件之间的间隔相等
Snip20160801_20.png
  • space-around:控件平均的分布在行里,两端保留一半的空间
Snip20160801_17.png
  • ③.定义控件在侧轴上的对齐方式-alignItems
    • flex-start:起点对齐
    • flex-end: 终点对齐
    • center: 中点对齐
    • baseline: 第一行文字的基线对齐---------只适用于网页端
    • stretch(默认): 如果项目未设置高度或设置为auto, 将沾满整个容器高度.
Snip20160801_26.png

当前主轴的放下为:row测试得到如图

flexDirection:'row',
justifyContent:'flex-start',
Snip20160801_31.png Snip20160801_33.png Snip20160801_34.png Snip20160801_35.png
  • ④.换行参数flex-Wrap

  • nowrap(默认) : 不换行

  • wrap : 换行

// 没有换行情况

flexWrap:'nowrap'
Snip20160801_36.png

// 换行

flexWrap:'wrap'
Snip20160801_37.png

6.2元素属性

  • ①.flex

关于flex这属性,这是一个比例属性.如图

Snip20160801_40.png

如果我们没有设置子控件的宽,那么子控件的宽就是随着内容来的.如果我们将宽度设置死了,到时候适配又是问题.所以有了flex,flex后面跟数字.

// 之所以用图片,是因为代码拷过来格式显示没法看~


Snip20160801_41.png

如图我们设置四个子控件的flex都为1,那么首先四个控件的宽度都是相等的.但是具体等于多少了?

单位宽度=父控件的宽度除以 / 4个控件的flex和(1+1+1+1)

然后具体每一个子控件的宽度=单位宽度*自己flex

flex都是1的情况

Snip20160801_42.png
  • ②.alignSelf
    auto | flex-start | flex-end | center | baseline | stretch
    alignSelf设置控件自己的alignItems对齐方式,不受父控件的alignItems对齐方式影响,覆盖父控件的alignItems对齐方式,和其他子控件的alignItems对齐方式不同
Snip20160801_44.png Snip20160801_45.png

7.获取屏幕宽高

//  方式一,到时候直接用width, height,scale
var Dimensions = require('Dimensions');
var {width, height,scale} = Dimensions.get('window');

// 方式二
var viewWidth = Dimensions.get('window').width;
var viewHeight = Dimensions.get('window').height;
var viewScale = Dimensions.get('window').scale;

4s:w320 h480
5: w320 h568
6:w375 h667
6p:w414 h736

Snip20160801_48.png Snip20160801_47.png
Top