一、先解释相关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);
    }];
}

测试结果如下:

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);
    }];
}

测试结果如下:

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);
    }];
}

结果如下:

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);
    }];
}

结果如下:

iOS Masonry控件等比例布局的更多相关文章

  1. iOS 开发 ZFUI framework控件,使布局更简单

    来自:http://www.jianshu.com/p/bcf86b170d9c 前言 为什么会写这个?因为在iOS开发中,界面的布局一直没有Android布局有那么多的方法和优势,我个人开发都是纯代 ...

  2. android 仿ios开关控件

    ios一些控件还是挺美丽的,可是对android程序猿来说可能比較苦逼,由于ios一些看起来简单的效果对android来说可能就没那么简单了,可是没办法非常多产品都是拿ios的一些控件叫android ...

  3. 79.iOS 设备的UI规范和iOS各控件默认高度

    iOS设备的UI 规范 iPhone界面尺寸 iPhone图标尺寸 iPad的设计尺寸 iPad图标尺寸 iPhone设备尺寸分辨率比例 iPhone各设备 launch image iOS 各种控件 ...

  4. JS调用Android、Ios原生控件

    在上一篇博客中已经和大家聊了,关于JS与Android.Ios原生控件之间相互通信的详细代码实现,今天我们一起聊一下JS调用Android.Ios通信的相同点和不同点,以便帮助我们在进行混合式开发时, ...

  5. 初识IOS,Label控件的应用。

    初识IOS,Label控件的应用. // // ViewController.m // Gua.test // // Created by 郭美男 on 16/5/31. // Copyright © ...

  6. IOS—UITextFiled控件详解

    IOS—UITextFiled控件详解 //初始化textfield并设置位置及大小 UITextField *text = [[UITextField alloc]initWithFrame:CGR ...

  7. [iOS基础控件 - 5.5] 代理设计模式 (基于”APP列表"练习)

    A.概述      在"[iOS基础控件 - 4.4] APP列表 进一步封装,初见MVC模式”上进一步改进,给“下载”按钮加上效果.功能      1.按钮点击后,显示为“已下载”,并且不 ...

  8. Qt基本控件及三大布局

    Qt基本控件及三大布局 来源: http://blog.csdn.net/a2604539133/article/details/73920696 Qt基本模块 一.Qt的三大布局 QHBoxLayo ...

  9. c#学习笔记之使用 TableLayoutPanel 控件设置窗体布局

    使用 TableLayoutPanel 控件设置窗体布局 在 Visual Studio IDE 左侧,找到“工具箱”选项卡. 选择“工具箱”选项卡,随即将显示工具箱.(或者,在菜单栏上,依次选择“视 ...

随机推荐

  1. .net core 发送邮件

    var message = new MimeMessage();            //发送方            message.From.Add(new MailboxAddress(&qu ...

  2. day 07 数据类型,集合,深浅copy

    1.day 06 内容回顾 小数据池 int :-5-256 str:特殊字符 ,*20 ascii:8位 1字节 表示一个字符 unicode:32位 4个字节 , 表示一个字符 字节表示8位表示一 ...

  3. EasyUI的textbox的disable ,readonly 用法

    EasyUI的textbox,如果用了disable, 那么提交时,后台mvc controller是取不到值的, 如果用了Readonly, textbox的样式又没有变化, 让人一眼就感知到哪些是 ...

  4. java AQS 一:

    最近加班太多,很久没有更新博客了,周末看了下阿里大神并发的书籍,把知识点做个记录. 一:线程安全的定义 当多个线程并发访问某个类时,如果不用考虑运营环境下的调度和交替运行,且不需要额外的辅助,这里认为 ...

  5. scrapy框架学习第一天

    今天是学习的第一天: 知识总结如下: 1,调试器相当于原料出口地(URL提供) 2,scrapy相当于中间加工商(具有销售权利)封装URL为request(请求) 3,下载器使用request(请求) ...

  6. unity打包安卓应用及生成签名

    首先,先进行安卓应用的打包.File->build Settings 弹出界面后选择Android,注意,这里如果黄色区域内容与我这个不一致,说明电脑上没有安装studio(安卓开发环境),具体 ...

  7. jQuery获取name相同被选中的多选框的值

    var name= "";            $("input:checkbox[name='AllElection']:checked").each(fu ...

  8. 显式拥塞通告(ECN)及其在Linux上的实现

    1 ECN简介 首先看看ECN握手报文的特点,根据RFC3168,ECN握手报文IP头部不能够设置ECT和CE位的 SYN报文TCP标志字段的CWR和ECE位被置1 SYN-ACK报文的CWR位被置0 ...

  9. egret中场景跳转的动画

    原理:创建一个截取当前场景的截图然后对截图进行bitmap处理加上tween.优点:无需任何图片,特效!适用于任何场景! //1.卷帘特效 //2.左右切换移动 //3.直接翻 //4.旋转掉落 // ...

  10. jmeter如何进行MQTT性能测试(测试前期准备一,性能测试需求)

    接到一个有关MQTT的性能测试任务,把查找资料到解决问题的过程都记录.分享下 首先先科普下性能测试中相关术语的解释及 说到性能测试.负载测试.压力测试.并发测试,很多人都是混合使用,或者一会叫压力测试 ...