iOS开发masonry的一些使用简介
从一开始的纯代码计算frame,虽然自认为计算frame 刚刚的,但是到后来还是开始xib的自动约束和手动约束与frame搭配使用,经历这几种方式,大概一年前开始普遍使用masonry来代码约束之后也跃跃欲试的自己体验了把,感觉还不错,分享下,比原生的好使多了。
使用步骤
1.添加Masonry文件夹的所有源代码到项目中(共两个Masonry这个文件夹,以及Masonry.framework)
2.添加两个宏定义导入头文件
// 只要添加了这个宏,就不用带mas_前缀
#define MAS_SHORTHAND
// 只要添加了这个宏,equalTo就等价于mas_equalTo
#define MAS_SHORTHAND_GLOBALS
// 这个头文件一定要放在上面两个宏的后面
#import "Masonry.h"
下面是添加约束的方法
// 这个方法只会添加新的约束
2 [view makeConstraints:^(MASConstraintMaker *make) {
3
4 }];
5
6 // 这个方法会将以前的所有约束删掉,添加新的约束
7 [view remakeConstraints:^(MASConstraintMaker *make) {
8
9 }];
10
11 // 这个方法将会覆盖以前的某些特定的约束
12 [view updateConstraints:^(MASConstraintMaker *make) {
13
14 }];
约束的类型
1.尺寸:width\height\size
2.边界:left\leading\right\trailing\top\bottom
3.中心点:center\centerX\centerY
4.边界:edges
*/

基本约束
UIView *superView = self.view;
//三个view布满整个屏幕
UIView *leftView = [[UIView alloc] init];
leftView.backgroundColor = [UIColor yellowColor];
[superView addSubview:leftView];
UIView *rightView = [[UIView alloc] init];
rightView.backgroundColor = [UIColor grayColor];
[superView addSubview:rightView];
UIView *bottomView = [[UIView alloc] init];
bottomView.backgroundColor = [UIColor greenColor];
[superView addSubview:bottomView];
int spacing = 0;
[leftView makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self.view).offset(spacing);
make.top.equalTo(superView).offset(64);
make.right.equalTo(rightView.mas_leftMargin).offset(spacing);
make.bottom.equalTo(superView.mas_centerY).offset(32);
}];
[rightView makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(leftView.mas_rightMargin).offset(spacing);
make.right.equalTo(superView).offset(spacing);
make.top.equalTo(superView).offset(64);
make.width.equalTo(leftView);
make.height.equalTo(leftView);
}];
[bottomView makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(superView).offset(0);
make.right.equalTo(superView).offset(0);
make.bottom.equalTo(superView).offset(0);
make.top.equalTo(leftView.mas_bottom).offset(0);
make.height.equalTo(leftView);
}];
更换所有约束
- (void)viewDidLoad {
[super viewDidLoad];
yesOrNo = YES;
thisBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[thisBtn setTitle:@"click" forState:UIControlStateNormal];
[thisBtn addTarget:self action:@selector(updateMas) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:thisBtn];
[thisBtn makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self.view).offset(10);
make.top.equalTo(self.view).offset(64 + 10);
make.width.equalTo(100);
make.height.equalTo(30);
}];
// Do any additional setup after loading the view.
}
-(void)updateMas
{
int num = arc4random()%300;
NSLog(@"%d",num);
[thisBtn remakeConstraints:^(MASConstraintMaker *make) {
make.bottom.equalTo(self.view).equalTo(- num - 20);
make.left.equalTo(self.view).equalTo(num);
make.width.equalTo(100);
make.height.equalTo(30);
}];
}
更新某个约束
- (void)viewDidLoad {
[super viewDidLoad];
btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[btn setTitle:@"click" forState:UIControlStateNormal];
btn.backgroundColor = [UIColor grayColor];
[btn addTarget:self action:@selector(update) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btn];
[btn makeConstraints:^(MASConstraintMaker *make) {
//make.centerX.equalTo(self.view.centerX);
//make.centerY.equalTo(self.view.centerY);
make.center.equalTo(self.view);
make.width.equalTo(100);
make.height.equalTo(30);
}];
// Do any additional setup after loading the view.
}
-(void)update
{
int width = arc4random()%300 +30;
[btn updateConstraints:^(MASConstraintMaker *make) {
make.width.equalTo(width);
}];
}
Scrollview
#import "ScrollviewViewController.h"
@interface ScrollviewViewController ()
@property(nonatomic,strong)UIScrollView *myScrollview;
@end
@implementation ScrollviewViewController
- (void)viewDidLoad {
[super viewDidLoad];
_myScrollview = [[UIScrollView alloc] init];
_myScrollview.backgroundColor = [UIColor grayColor];
[self.view addSubview:_myScrollview];
[self.myScrollview makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(self.view);
}];
[self makeScr];
// Do any additional setup after loading the view.
}
-(void)makeScr
{
UIView *contentView = UIView.new;
[self.myScrollview addSubview:contentView];
[contentView makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(self.myScrollview);
make.width.equalTo(self.myScrollview);
}];
UIView *lastView;
CGFloat height = 35 + arc4random()%100;
for (int i=0 ; i< 16; i++) {
UIView *view = UIView.new;
view.backgroundColor =[self randomColor];
[contentView addSubview:view];
[view makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(lastView ? lastView.bottom : @0);
make.left.equalTo(@0 );
make.width.equalTo(contentView.width);
make.height.equalTo(@(height));
}];
lastView = view;
}
[contentView makeConstraints:^(MASConstraintMaker *make) {
make.bottom.equalTo(lastView.bottom);
}];
}
- (UIColor *)randomColor {
CGFloat hue = ( arc4random() % 255 / 255.0 ); // 0.0 to 1.0
CGFloat saturation = ( arc4random() % 128 / 255.0 ) + 0.5; // 0.5 to 1.0, away from white
CGFloat brightness = ( arc4random() % 128 / 255.0 ) + 0.5; // 0.5 to 1.0, away from black
return [UIColor colorWithHue:hue saturation:saturation brightness:brightness alpha:1];
}
以上是一些最基本的简单使用,具体的还得自己加以研究啊。
需要注意的:
1 控件必需先添加在给约束。
以下是约束的代码demo
iOS开发masonry的一些使用简介的更多相关文章
- iOS开发UI篇—核心动画简介
转自:http://www.cnblogs.com/wendingding/p/3801036.html iOS开发UI篇—核心动画简介 一.简单介绍 Core Animation,中文翻译为核心动画 ...
- iOS开发-Masonry简易教程
关于iOS布局自动iPhone6之后就是AutoLayOut,AutoLayOut固然非常好用,不过有时候我们需要在页面手动进行页面布局,VFL算是一种选择,如果对VFL不是很熟悉可以参考iOS开发- ...
- XMPPFrameWork IOS 开发(一)xmpp简介
原始地址:XMPPFrameWork IOS 开发(一) XMPP : The Extensible Messaging and Presence Protocol 中文全称: 可扩展通讯和表示协议 ...
- iOS开发中KVC、KVO简介
在iOS开发中,KVC和KVO是经常被用到的.可以使用KVC对对象的属性赋值和取得对象的属性值,可以使用KVO监听对象属性值的变化.简单介绍一下KVC和KVO. 一:键值编码(KVC) KVC,全称 ...
- iOS开发 Masonry的简单使用
首先,在正式使用Masonry之前,我们先来看看在xib中我们是如何使用AutoLayout 从图中我们可以看出,只要设置相应得局限,控制好父视图与子视图之间的关系就应该很ok的拖出你需要的需 ...
- ios开发--高德地图SDK使用简介
高德LBS开放平台将高德最专业的定位.地图.搜索.导航等能力,以API.SDK等形式向广大开发者免费开放.本章节我们来简单学习一下如何使用它的定位及地图SDK. 一.相关框架及环境配置 地图SDK 对 ...
- iOS开发 masonry 设置tableHeadView
最近做公司项目,使用到到tableHeadView,一直习惯用masonry来设置约束,但是设置tableHeadView没有那么的简单.先看下效果图: 视图层次结构是这样的: 基础的创建工程项目之类 ...
- 李洪强漫谈iOS开发[C语言-007]-语言标准简介
C语言是介于低级语言和高级语言之间的 一个应用程序 C语言在嵌入式上使用,的确是具有低级语言的特征 直接操作硬件,扫描内存 访问到的都是虚拟内存,一个应用程序占多大内存? 表示最多 可以放多少条指令 ...
- 【iOS开发-80】Quartz2D绘图简介:直线/圆形/椭圆/方形以及上下文栈管理CGContextSaveGState/CGContextRestoreGState
本文转载至 http://blog.csdn.net/weisubao/article/details/41282457 - (void)drawRect:(CGRect)rect { //获得当前上 ...
随机推荐
- 51nod1118(水题)
题目链接: https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1118 题意: 中文题诶~ 思路: 因为机器人只能往下或者右 ...
- PHP上传文件示例
虽然大多数人认为Web只包含网页,但HTTP协议实际上可以传输任何文件,如office文档.PDF.可执行文件.AVI.压缩文件及各种其他文件类型.虽然FTP在历史上一直是向服务器上传文件的标准方式, ...
- js验证输入的金钱格式
<html> <head> <title>js验证输入的金钱格式</title> <script type="text/javascri ...
- (一)洞悉linux下的Netfilter&iptables:什么是Netfilter?
转自:http://blog.chinaunix.net/uid-23069658-id-3160506.html 本人研究linux的防火墙系统也有一段时间了,由于近来涉及到的工作比较纷杂,久而久之 ...
- curl命令行使用
curl 命令使用 原文地址:http://blog.sina.com.cn/s/blog_4b9eab320100slyw.html 可以看作命令行浏览器 1.开启gzip请求curl -I h ...
- 浏览器-07 chromium 渲染1
Chromium 软件渲染 软件渲染就是利用CPU,根据一定的算法来计算生成网页的内容; Chromium都是用软件渲染的技术来完成页面的绘制工作(除非强行打开硬件加速绘制); 软件渲染基础和架构 R ...
- 用 TWebBrowser 查找网页上的按钮,编辑框,
Form1.wb1.Navigate(Aurl); <table> <tr> <td style="text-align:right;">< ...
- 2012 Multi-University #10
容斥原理 A Number Sequence 题意:给出n个数,b1,b2,b3……bn,构造n个数,a1,a2,……an(ai>1),使得a1*a2*a3……an=b1*b2……bn 分析:容 ...
- java 对象输入输出流
对象的输入输出流的作用: 用于写入对象 的信息读取对象的信息. 对象的持久化. 比如:用户信息. ObjectInputStream : 对象输入流 ...
- 07@Pattern_Note_命令模式
前言 20160109: 今天开始看命令模式,主要从概念和实现来深入理解该模式 概念理解[部分来自摘录] 概念 通常来说,"行为请求者"与"行为实现者"是紧耦合 ...