Masonry的写法总结

栏目: IOS · 发布时间: 5年前

内容简介:对于Masonry的一些基本使用,相信有点基础的iOS开发同学肯定或多或少都知道,本文旨在介绍具体设置约束属性的各种姿势,适合用过Masonry的同学阅读。温馨提示:Masonry老手可以忽略本文。Masonry使用链式方式编程,有定义一些宏来方便开发,如下:

对于Masonry的一些基本使用,相信有点基础的iOS开发同学肯定或多或少都知道,本文旨在介绍具体设置约束属性的各种姿势,适合用过Masonry的同学阅读。

温馨提示:Masonry老手可以忽略本文。

常用宏定义

Masonry使用链式方式编程,有定义一些宏来方便开发,如下:

#define offset(...)                      mas_offset(__VA_ARGS__)
#define equalTo(...)                     mas_equalTo(__VA_ARGS__)
#define greaterThanOrEqualTo(...)        mas_greaterThanOrEqualTo(__VA_ARGS__)
#define lessThanOrEqualTo(...)           mas_lessThanOrEqualTo(__VA_ARGS__)
复制代码

如:

// make.left 以下两种写法等价
make.left.equalTo(superView.mas_left).offset(10);
make.left.mas_equalTo(superView.mas_left).mas_offset(10);
复制代码

约束属性的关系

约束属性有三种关系,分别是等于,大于,小于。

  • 等于(equivalent to NSLayoutRelationEqual
//.equalTo
// view.width = 60
make.width.mas_equalTo(60);
复制代码
  • 小于(equivalent to NSLayoutRelationLessThanOrEqual
//.lessThanOrEqualTo
// view.width <= 120
make.width.lessThanOrEqualTo(120);
复制代码
  • 大于(equivalent to NSLayoutRelationGreaterThanOrEqual
//.greaterThanOrEqualTo 
// view.width >= 60
make.width.lessThanOrEqualTo(60);
复制代码

常见写法

对于自动布局我们只需要设置好view的position,包括X轴和Y轴上的位置,以及view的长宽即可。

Masonry除了设置单个约束以外,还提供了很多方便的复合约束设置方式。以下分别介绍单个约束属性设置方式和复合约束设置方式。

长度和宽度

// make width = 60
make.width.mas_equalTo(60);

// make height = 60
make.height.mas_equalTo(60);

// make height = 60, width = 60
make.size.equalTo(CGSizeMake(60, 60));

// make view1.height = view2.height view1.width = view2.width
make.size.mas_equalTo(view2)

// make width and height greater than or equal to view2
make.size.greaterThanOrEqualTo(view2)

// make width = superview.width + 100, height = superview.height - 50
make.size.equalTo(superview).sizeOffset(CGSizeMake(100, -50))
复制代码

边距对齐(位置设置)

make.left.mas_equalTo(superView.mas_left).mas_offset(10);
make.left.mas_greaterThanOrEqualTo(10);
复制代码

约束的链式写法中,不包含其他相对的view时,默认为其superview view.left 等于 label.lefet,以下三种写法等价:

make.left.mas_equalTo(100); 
make.left.mas_equalTo(view.superview.mas_left).offset(10);
make.left.mas_equalTo(view.superview).offset(10);
复制代码

view.left 大于等于 label.lefet,以下两种写法等同:

make.left.greaterThanOrEqualTo(label);
make.left.greaterThanOrEqualTo(label.mas_left);
复制代码

上下左右四个边缘等于父视图的边缘,也就是top, left, bottom, right equal view2,以下三种写法等同(复合约束写法):

make.edges.equalTo(superview);
make.edges.equalTo(superview).insets(UIEdgeInsetsMake(0, 0, 0, 0))
make.left.right.and.bottom.equalTo(superview);

PS:如果top, left, bottom, right的边距各自不同:
// make top = superview.top + 5, left = superview.left + 10,
// bottom = superview.bottom - 15, right = superview.right - 20
make.edges.equalTo(superview).insets(UIEdgeInsetsMake(5, 10, 15, 20))

复制代码

中心对齐(位置设置)

X轴上中心和superview的X轴上中心对齐。

make.centerX.equalTo(superview.mas_centerX).offet(0)
make.centerX.equalTo(superview.mas_centerX) 
make.centerX.equalTo(superview)

复制代码

X轴和Y轴中心对齐

make.center.equalTo(superview)
make.center.equalTo(superview).centerOffset(CGPointMake(0, 0))


PS:如果X轴和Y轴上的中心对齐各自不同:
// make centerX = superview.centerX - 5, centerY = superview.centerY + 10
make.center.equalTo(superview).centerOffset(CGPointMake(-5, 10))
复制代码

约束数字值

Masonry允许将宽度和高度设置为常量值。如果要将视图设置一个最小和最大宽度时,可以在block中同时设定:

//width >= 200 && width <= 400
make.width.greaterThanOrEqualTo(@200);
make.width.lessThanOrEqualTo(@400)
复制代码

Masonry不允许把边距属性(left,top,right,bottom,centerX,centerY)的约束设置为常量值,如果设置了,会默认这些属性是相对父视图设置的。

//creates view.left = view.superview.left + 10
make.left.equalTo(@10)

//creates view.left = view.superview.left + 10
make.left.lessThanOrEqualTo(@10)

// 或者使用mas_equalTo这种时:
make.top.mas_equalTo(42);
make.height.mas_equalTo(20);
make.size.mas_equalTo(CGSizeMake(50, 100));
make.edges.mas_equalTo(UIEdgeInsetsMake(10, 0, 10, 0));
make.left.mas_equalTo(view).mas_offset(UIEdgeInsetsMake(10, 0, 10, 0));
复制代码

优先级

自定义优先级

// .priority allows you to specify an exact priority  
make.top.equalTo(label.mas_left).with.priority(600);
复制代码

高优先级

// .priorityHigh equivalent to **UILayoutPriorityDefaultHigh**  
make.left.equalTo(label.mas_left).with.priorityHigh();
复制代码

中等优先级

// .priorityMedium is half way between high and low  
make.left.equalTo(label.mas_left).with.priorityMedium();
复制代码

低优先级

// .priorityLow equivalent to **UILayoutPriorityDefaultLow**
make.left.greaterThanOrEqualTo(label.mas_left).with.priorityLow();
复制代码

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Django 1.0 Template Development

Django 1.0 Template Development

Scott Newman / Packt / 2008 / 24.99

Django is a high-level Python web application framework designed to support the rapid development of dynamic websites, web applications, and web services. Getting the most out of its template system a......一起来看看 《Django 1.0 Template Development》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具