Masonry基本用法

前言

说到iOS自动布局,有很多的解决办法。有的人使用xib/storyboard自动布局,也有人使用frame来适配。对于前者,笔者并不喜欢,也不支持。对于后者,更是麻烦,到处计算高度、宽度等,千万大量代码的冗余,对维护和开发的效率都很低。

笔者在这里介绍纯代码自动布局的第三方库:Masonry。这个库使用率相当高,在全世界都有大量的开发者在使用,其star数量也是相当高的。

效果图

本节详解Masonry的基本用法,先看看效果图:

我们这里要布局使这三个控件的高度一致,而绿色和红色的控件高度和宽度相待。

核心代码

看下代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

- (void)viewDidLoad {

[super viewDidLoad];

UIView *greenView = UIView.new;

greenView.backgroundColor = UIColor.greenColor;

greenView.layer.borderColor = UIColor.blackColor.CGColor;

greenView.layer.borderWidth = 2;

[self.view addSubview:greenView];

UIView *redView = UIView.new;

redView.backgroundColor = UIColor.redColor;

redView.layer.borderColor = UIColor.blackColor.CGColor;

redView.layer.borderWidth = 2;

[self.view addSubview:redView];

UIView *blueView = UIView.new;

blueView.backgroundColor = UIColor.blueColor;

blueView.layer.borderColor = UIColor.blackColor.CGColor;

blueView.layer.borderWidth = 2;

[self.view addSubview:blueView];

// 使这三个控件等高

CGFloat padding = 10;

[greenView mas_makeConstraints:^(MASConstraintMaker *make) {

make.top.mas_equalTo(padding);

make.left.mas_equalTo(padding);

make.right.mas_equalTo(redView.mas_left).offset(-padding);

make.bottom.mas_equalTo(blueView.mas_top).offset(-padding);

// 三个控件等高

make.height.mas_equalTo(@[redView, blueView]);

// 红、绿这两个控件等高

make.width.mas_equalTo(redView);

}];

[redView mas_makeConstraints:^(MASConstraintMaker *make) {

make.top.height.bottom.mas_equalTo(greenView);

make.right.mas_equalTo(-padding);

make.left.mas_equalTo(greenView.mas_right).offset(padding);

}];

[blueView mas_makeConstraints:^(MASConstraintMaker *make) {

make.height.mas_equalTo(greenView);

make.bottom.mas_equalTo(-padding);

make.left.mas_equalTo(padding);

make.right.mas_equalTo(-padding);

}];

}

讲解

添加约束的方法是:mas_makeConstraints。我们可以看到,约束可以使用链式方式,使用方法很简单,看起来像一句话。

看这句话:make.top.height.bottom.mas_equalTo(greenView),意思是:使我的顶部、高度和底部都与greenView的顶部、高度和底部相等。因此,只要greenView的约束添加好了,那么redView的顶部、高度和底部也就自动计算出来了。

大多时候,我们并不会将一句话完整地写出来,而是使用简写的方式。如:

1

2

3

make.right.mas_equalTo(-padding);

其完整写法为:

1

2

3

make.right.mas_equalTo(bludView.superView.mas_right).offset(-padding);

当我们是要与父控件相对约束时,可以省略掉父视图。注意,并不是什么时候都可以省略,只有约束是同样的才可以省略。比如,约束都是right才可以。如果是一个left一个是right,那么就不能省略了。

时间: 2024-11-02 23:30:14

Masonry基本用法的相关文章

masonry 基本用法

一:masonry 基本用法 fistView=[[UIView alloc] init]; fistView.backgroundColor=[UIColor redColor]; [self.view addSubview:fistView]; secondView=[[UIView alloc] init]; secondView.backgroundColor=[UIColor blueColor]; [self.view addSubview:secondView]; threeVie

Masonry部分用法(控件数组等间隔排序)

(转自)http://www.jianshu.com/p/1d1a1165bb04 简要 自动布局最重要的是约束:UI元素间关系的数学表达式.约束包括尺寸.由优先级和阈值管理的相对位置.它们是添加剂,可能导致约束冲突 .约束不足造成布局无法确定 .这两种情况都会产生异常. 使用前:AutoLayout关于更新的几个方法的区别 setNeedsLayout:告知页面需要更新,但是不会立刻开始更新.执行后会立刻调用layoutSubviews. layoutIfNeeded:告知页面布局立刻更新.所

Masonry基本用法 完美屏幕适配

初次接触Masonry   还是在一篇网易文章上    Masonry是一个开源的第三方   成熟,简单易懂,方便等优点   布局的原理是相对适配   完全适配6,6p等 用Masonry之前需要去下载最新版的      地址大家百度把      然后把类库拷贝到项目中 导入头文件 #import "Masonry.h"       啥也不多说了   直接上代码 UIButton * redBtn = [[UIButton alloc]init]; redBtn.backgroundC

Masonry的使用

今天来介绍下Masonry 参考(http://www.cocoachina.com/ios/20141219/10702.html) Masonry 源码:https://github.com/Masonry/Masonry Masonry是一个轻量级的布局框架 拥有自己的描述语法 采用更优雅的链式语法封装自动布局 简洁明了 并具有高可读性 而且同时支持 iOS 和 Max OS X. podfile 的引用方式 platform :ios, '7.0' target ‘MyApp’ do p

关于Masonry框架(AutoLayout)的用法--面向初学者

Masonry作为目前较为流行的自动布局第三方框架,简单易用,大大减少了程序员花在UI布局和屏幕适配的精力与时间. 1 基本用法 1.1 事例1: // 首先是view1自动布局 [view1 mas_makeConstraints:^(MASConstraintMaker *make) { // view1左边与superView左边对齐 make.left.equalTo(superView.mas_left); // view1右边与superView右边对齐. make.right.eq

masonry 使用笔记

Masonry的使用,动画,出现问题解决等 经过一点时间的使用,发现在网上很少有Masonry的教程,也仅仅有那么一两篇而已,在此我编写一下我最近一段时间使用的方法,供大家学习. Masonry是AutoLayout的一个第三方类库,用链式语法封装了冗长的AutoLayout代码,因此学习成本相对于官方提供的AutoLayout,以及VFL语言而言,低上很多很多... 准备 在GitHub上 https://github.com/SnapKit/Masonry 下载配置第三方库,基本使用方法在R

【iOS】Masonry使用案例讲解

如果说自动布局解救了多屏幕适配,那众多三方库的出现就解救了系统自动布局的写法.Masonry就是其中一个. 在Github上,Masonry已经得到5000+个star,用法上也比较简单灵活,很大程度上替代了传统的NSLayoutConstraint布局方式.本文将利用几个案例来讲解Masonry的使用. Masonry下载地址: https://github.com/SnapKit/Masonry 本文Demo下载地址: ?https://github.com/saitjr/MasonryDe

iOS自适应布局之Masonry(一)

前言 iPhone 5之前我们对应用布局停留在3.5寸一个屏幕的阶段,当时的安卓屌丝们是多么的羡慕iOS开发,不会被大量的屏幕适配所烦恼.随着iPhone产品的迭代,逐渐出现4寸.4.7寸.5.5寸-.,你们说,iphone10+会有多少寸?O(∩_∩)O~ 简介 正因为上面说的那样,屏幕的尺寸逐步增多,还沿用以前的方法布局显然是不行的,这时候为布局引进新的结局办法NSAutoLayout,但苹果提供的比较复杂麻烦,所以就有人在此基础上进行封装,而提供一种高效的框架--Masonary 安装 如

Coding源码学习第四部分(Masonry介绍与使用(三))

接上篇继续进行Masonry 的学习. (12)tableViewCell 布局 1 #import "TableViewController.h" 2 #import "TestTableViewCell.h" 3 4 @interface TableViewController ()<UITableViewDelegate, UITableViewDataSource> 5 6 @property(nonatomic, strong) UITable