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();
复制代码

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

查看所有标签

猜你喜欢:

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

游戏编程算法与技巧

游戏编程算法与技巧

【美】Sanjay Madhav / 刘瀚阳 / 电子工业出版社 / 2016-10 / 89

《游戏编程算法与技巧》介绍了大量今天在游戏行业中用到的算法与技术。《游戏编程算法与技巧》是为广大熟悉面向对象编程以及基础数据结构的游戏开发者所设计的。作者采用了一种独立于平台框架的方法来展示开发,包括2D 和3D 图形学、物理、人工智能、摄像机等多个方面的技术。《游戏编程算法与技巧》中内容几乎兼容所有游戏,无论这些游戏采用何种风格、开发语言和框架。 《游戏编程算法与技巧》的每个概念都是用C#......一起来看看 《游戏编程算法与技巧》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具