内容简介:对于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(); 复制代码
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
算法分析导论(第2版)(英文版)
[美]Robert Sedgewick(罗伯特•塞奇威克)、[美]Philippe Flajolet(菲利普•弗拉若莱) / 电子工业出版社 / 2015-6 / 128.00元
《算法分析导论(第2版)(英文版)》全面介绍了算法的数学分析中所涉及的主要技术。涵盖的内容来自经典的数学课题(包括离散数学、初等实分析、组合数学),以及经典的计算机科学课题(包括算法和数据结构)。《算法分析导论(第2版)(英文版)》的重点是“平均情况”或“概率性”分析,书中也论述了“最差情况”或“复杂性”分析所需的基本数学工具。 《算法分析导论(第2版)(英文版)》第 1 版为行业内的经典著......一起来看看 《算法分析导论(第2版)(英文版)》 这本书的介绍吧!
URL 编码/解码
URL 编码/解码
XML、JSON 在线转换
在线XML、JSON转换工具