iOS Masonry控件等比例布局

一、先解释相关API

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
  *  distribute with fixed spacing
  *
  *  @param axisType     横排还是竖排
  *  @param fixedSpacing 两个控件间隔
  *  @param leadSpacing  第一个控件与边缘的间隔
  *  @param tailSpacing  最后一个控件与边缘的间隔
  */
- ( void )mas_distributeViewsAlongAxis:(MASAxisType)axisType withFixedSpacing:(CGFloat)fixedSpacing leadSpacing:(CGFloat)leadSpacing tailSpacing:(CGFloat)tailSpacing;
/**
  *  distribute with fixed item size
  *
  *  @param axisType        横排还是竖排
  *  @param fixedItemLength 控件的宽或高
  *  @param leadSpacing     第一个控件与边缘的间隔
  *  @param tailSpacing     最后一个控件与边缘的间隔
  */
- ( void )mas_distributeViewsAlongAxis:(MASAxisType)axisType withFixedItemLength:(CGFloat)fixedItemLength leadSpacing:(CGFloat)leadSpacing tailSpacing:(CGFloat)tailSpacing;

两个API,分为固定间隔不固定宽高,固定宽高不固定间隔,根据具体需求使用相应的即可。

需要注意的是: 横排的时候要相应设置控件数组的垂直约束,竖排的时候要相应设置控件数字的水平约束。

二、具体实践测试

首先做准备工作,先生成四个View(需要被排列的),代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
- (NSMutableArray *)masonryViewArray {
     if  (!_masonryViewArray) {
         
         _masonryViewArray = [NSMutableArray array];
         for  ( int  i =  0 ; i <  4 ; i ++) {
             
             UIView *view = [[UIView alloc] init];
             view.backgroundColor = [UIColor redColor];
             [self.view addSubview:view];
             [_masonryViewArray addObject:view];
         }
     }
     
     return  _masonryViewArray;
}

1、水平方向排列、固定控件间隔、控件长度不定

测试代码如下

1
2
3
4
5
6
7
8
9
10
11
- ( void )test_masonry_horizontal_fixSpace {
     // 实现masonry水平固定间隔方法
     [self.masonryViewArray mas_distributeViewsAlongAxis:MASAxisTypeHorizontal withFixedSpacing: 30  leadSpacing: 10  tailSpacing: 10 ];
     
     // 设置array的垂直方向的约束
     [self.masonryViewArray mas_makeConstraints:^(MASConstraintMaker *make) {
     
         make.top.equalTo( 150 );
         make.height.equalTo( 80 );
     }];
}

测试结果如下:

1.png

2、水平方向排列、固定控件长度、控件间隔不定

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
- ( void )test_masonry_horizontal_fixItemWidth {
     
     // 实现masonry水平固定控件宽度方法
     [self.masonryViewArray mas_distributeViewsAlongAxis:MASAxisTypeHorizontal withFixedItemLength: 80  leadSpacing: 10  tailSpacing: 10 ];
     
     // 设置array的垂直方向的约束
     [self.masonryViewArray mas_makeConstraints:^(MASConstraintMaker *make) {
         
         make.top.equalTo( 150 );
         make.height.equalTo( 80 );
     }];
}

测试结果如下:

1.png

3、垂直方向排列、固定控件间隔、控件高度不定

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
- ( void )test_masonry_vertical_fixSpace {
     
     // 实现masonry垂直固定控件高度方法
     [self.masonryViewArray mas_distributeViewsAlongAxis:MASAxisTypeVertical withFixedSpacing: 30  leadSpacing: 10  tailSpacing: 10 ];
     
     // 设置array的水平方向的约束
     [self.masonryViewArray mas_makeConstraints:^(MASConstraintMaker *make) {
         
         make.left.equalTo( 150 );
         make.width.equalTo( 80 );
     }];
}

结果如下:

1.png

4、垂直方向排列、固定控件高度、控件间隔不定

1
2
3
4
5
6
7
8
9
10
11
12
- ( void )test_masonry_vertical_fixItemWidth {
     
     // 实现masonry垂直方向固定控件高度方法
     [self.masonryViewArray mas_distributeViewsAlongAxis:MASAxisTypeVertical withFixedItemLength: 80  leadSpacing: 10  tailSpacing: 10 ];
     
     // 设置array的水平方向的约束
     [self.masonryViewArray mas_makeConstraints:^(MASConstraintMaker *make) {
         
         make.left.equalTo( 150 );
         make.width.equalTo( 80 );
     }];
}

结果如下:

1.png

转载于:https://www.cnblogs.com/chenweb/p/10039951.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值