1、Masonry概述

  • 目前最流行的Autolayout第三方框架

  用优雅的代码方式编写Autolayout

  省去了苹果官方恶心的Autolayout代码

  大大提高了开发效率

2、常用方法

  • 这个方法只会添加新的约束
[blueView mas_makeConstraints:^(MASConstraintMaker *make) {

}];
  • 这个方法会将以前的所有约束删掉,添加新的约束
[blueView mas_remakeConstraints:^(MASConstraintMaker *make) {

}];
  • 这个方法将会覆盖以前的某些特定的约束
[blueView mas_updateConstraints:^(MASConstraintMaker *make) {

}]; 

3、约束类型

  • 尺寸:

  width(宽)\height(高)\size(大小)

        // 宽度约束
make.width.mas_equalTo();
// 高度约束
make.height.mas_equalTo(); // 大小约束(与上面两句等价)
make.size.mas_equalTo(CGSizeMake(, ));
  • 边界:

  left\leading(左边界)\right\trailing(右边界)\top(顶部边界)\bottom(底部边界)  

       // 左边(leading类似)
make.left.mas_equalTo(self.view).offset();
// 右边(trailing类似)
make.right.equalTo(self.view).offset(-);
// 顶部
make.top.equalTo(self.view).offset();
// 底部
make.bottom.mas_equalTo(self.view).offset(-);
  • 中心点:

  center\centerX\centerY

    // 居中(水平+垂直)
// 尺寸是父控件的一半
[blueView mas_makeConstraints:^(MASConstraintMaker *make) {
make.size.mas_equalTo(self.view).multipliedBy(0.5);
make.center.mas_equalTo(self.view); // 与下面两句代码等价
// make.centerX.mas_equalTo(self.view);
// make.centerY.mas_equalTo(self.view);
}];
  • 内边距实现边界约束:

  edges

// UIEdgeInsets 内边距

make.edges.mas_equalTo(self.view).insets(UIEdgeInsetsMake(, , , ));

4、mas_前缀修饰与不修饰的区别    

  • mas_equalTo和equalTo

  默认情况下:

   mas_equalTo有自动包装功能,比如自动将20包装为@20

   equalTo没有自动包装功能

  mas_equalTo的功能强于 > equalTo,可以一直使用mas_equalTo

  • mas_width和width

  默认情况下:

   width是make对象的一个属性,用来添加宽度约束用的,表示对宽度进行约束

   mas_width是一个属性值,用来当做equalTo的参数,表示某个控件的宽度属性

  mas_height、mas_centerX以此类推

  • 消除区别办法

  如果添加了下面的宏,那么 mas_equalTo 和 equalTo 就没有区别

  #define MAS_SHORTHAND_GLOBALS // 注意:这个宏一定要添加到#import "Masonry.h"前面

  如果添加了下面的宏,mas_width也可以写成width

  #define MAS_SHORTHAND

//define this constant if you want to use Masonry without the 'mas_' prefix
#define MAS_SHORTHAND //define this constant if you want to enable auto-boxing for default syntax
#define MAS_SHORTHAND_GLOBALS #import "Masonry.h" - (void)viewDidLoad {
[super viewDidLoad]; // 蓝色控件
UIView *blueView = [[UIView alloc] init];
blueView.backgroundColor = [UIColor blueColor];
[self.view addSubview:blueView]; // 红色控件
UIView *redView = [[UIView alloc] init];
redView.backgroundColor = [UIColor redColor];
[self.view addSubview:redView]; // 添加约束
CGFloat margin = ;
CGFloat height = ;
[blueView makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self.view.left).offset(margin);
make.right.equalTo(redView.left).offset(-margin);
make.bottom.equalTo(self.view.bottom).offset(-margin);
make.height.equalTo(height);
make.top.equalTo(redView.top);
make.bottom.equalTo(redView.bottom);
make.width.equalTo(redView.width);
}]; [redView makeConstraints:^(MASConstraintMaker *make) {
make.right.equalTo(self.view.right).offset(-margin);
}];

5、可有可无的用法

  以下方法都仅仅是为了提高可读性,可有可无

  • with
- (MASConstraint*)with {
return self;
}   
  使用情况示例代码
  // 尺寸限制:100x100
  // 位置:粘着父控件右下角,间距是20
  [blueView mas_makeConstraints:^(MASConstraintMaker *make) {
  // 宽度约束
   make.width.equalTo(@);
   // 高度约束
  make.height.equalTo(@);
   // 右边
   make.right.equalTo(self.view.mas_right).with.offset(-);
   // 顶部
   make.top.equalTo(self.view.mas_top).with.offset();
  }];
  • and
- (MASConstraint*)and {
return self;
}

  使用情况示例代码

    // 尺寸限制:100x100
// 位置:粘着父控件右下角,间距是20 [blueView mas_makeConstraints:^(MASConstraintMaker *make) {
// 宽度高度约束
make.width.and.height.mas_equalTo();
// 右边
make.right.equalTo(self.view).offset(-);
// 顶部
make.top.equalTo(self.view).offset(); }];

【原】iOS学习之Masonry第三方约束的更多相关文章

  1. 【原】iOS学习47之第三方-FMDB

    将 CocoaPods 安装后,按照 CocoaPods 的使用说明就可以将 FMDB 第三方集成到工程中,具体请看博客iOS学习46之第三方CocoaPods的安装和使用(通用方法) 1. FMDB ...

  2. IOS学习:常用第三方库(GDataXMLNode:xml解析库)

    IOS学习:常用第三方库(GDataXMLNode:xml解析库) 解析 XML 通常有两种方式,DOM 和 SAX: DOM解析XML时,读入整个XML文档并构建一个驻留内存的树结构(节点树),通过 ...

  3. iOS学习笔记——AutoLayout的约束

    iOS学习笔记——AutoLayout约束 之前在开发iOS app时一直以为苹果的布局是绝对布局,在IB中拖拉控件运行或者直接使用代码去调整控件都会发上一些不尽人意的结果,后来发现iOS在引入了Au ...

  4. 【原】iOS学习46之第三方CocoaPods的安装和使用(通用方法)

    本文主要说明CocoaPods的安装步骤.使用说明和常见的报错即解决方法. 1. CocoaPods 1>  CocoaPods简介 CocoaPods是一个用来帮助我们管理第三方依赖库的工具. ...

  5. 【原】iOS学习之PINCache第三方缓存框架

    在项目中总是需要缓存一些网络请求数据以减轻服务器压力,业内也有许多优秀的开源的解决方案.通常的缓存方案都是由内存缓存和磁盘缓存组成的,内存缓存速度快容量小,磁盘缓存容量大速度慢可持久化. 1.PINC ...

  6. 【原】iOS学习之第三方-AFNetworking1.3.0

    将 CocoaPods 安装后,按照 CocoaPods 的使用说明就可以将 AFNetworking 第三方集成到工程中,具体请看上篇博客iOS学习46之第三方CocoaPods的安装和使用(通用方 ...

  7. iOS学习——布局利器Masonry框架源码深度剖析

    iOS开发过程中很大一部分内容就是界面布局和跳转,iOS的布局方式也经历了 显式坐标定位方式 --> autoresizingMask --> iOS 6.0推出的自动布局(Auto La ...

  8. 原 iOS深入学习(Block全面分析)http://my.oschina.net/leejan97/blog/268536

    原 iOS深入学习(Block全面分析) 发表于1年前(2014-05-24 16:45)   阅读(26949) | 评论(14) 39人收藏此文章, 我要收藏 赞21 12月12日北京OSC源创会 ...

  9. 【原】iOS学习之事件处理的原理

    在iOS学习23之事件处理中,小编详细的介绍了事件处理,在这里小编叙述一下它的相关原理 1.UITouch对象 在触摸事件的处理方法中都会有一个存放着UITouch对象的集合,这个参数有什么用呢? ( ...

随机推荐

  1. 创建table并实现ID自增长

    ① create table p_user( id               number(10) not null primary key, name             varchar2(3 ...

  2. IE7 自动为文件路径添加域名

    对于图片等文件的路径,一般在同一个域名下的文件都会使用相对路径,但如果使用JS获取文件的路径浏览器获取到的路径都是相对路径,但IE7会自动为路径添加域名变成绝对路径... IE7下图片路径,在文件相对 ...

  3. ubuntu 12.04 install docker-engine1.12.3

    root@node3:/data/src# cat /etc/issueUbuntu 12.04.4 LTS \n \l   root@node3:/data/src# cat /etc/apt/so ...

  4. springmvc+mybatis事务回滚

    spring-mybatis.xml中 配置了 <!-- 拦截器方式配置事物 --> <tx:advice id="transactionAdvice" tran ...

  5. PHP生成日历数组,减少分页

    2016年11月14日 20:45:41 星期一 情景, 每个用户设置定投, app的屏幕比较小, 觉得常规的线性分页下拉不是很方便 吧列表改为日历格式的会更方便执行, 每年12个月, 总过12个页面 ...

  6. Angular2 组件生命周期

    1. 说明 Angular每个组件都存在一个生命周期,从创建,变更到销毁.Angular提供组件生命周期钩子,把这些关键时刻暴露出来,赋予在这些关键结点和组件进行交互的能力. 2. 接口 按照生命周期 ...

  7. sh 测试网段在线主机

    yum install nmap nmap -sP  192.168.21.1/24 查看网段在线主机 grep -vwf file1 file2 文件内容比较 #!/bin/bash # day=` ...

  8. SQL Server 从数据库中查询去年的今天的数据的sql语句

    因为最近的项目的一个小功能需要实现当前数据和历史的今天做一个对比.在网上也查了很久,很多都是实现一个月内的,一年内的所有数据,昨晚突然就找到了下面的实现方法,在SQL Server2008中试了一下, ...

  9. monkey工具使用中遇到的问题之二:尝试了各种方法通过adb都无法找到设备

    测试环境: 1.用的是adt-bundle-windows-x86_64-20140702里面的adb 2.用的是手机模拟器(夜神) 问题描述: 已搭建好adb的环境,输入adb,可以看到以下相关信息 ...

  10. Linux下的DOS攻击

    Linux下的DOS攻击 DOS是Denial of service的简称,即拒绝服务,造成Dos攻击行为被称为Dos攻击,其目的是使计算机或网络无法提供正常的服务.最常见的Dos攻击有计算机带宽攻击 ...