iOS开发中Masonry的使用总结:

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #000000 }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC"; color: #000000 }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #000000; min-height: 16.0px }
p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 17.0px; font: 14.0px "PingFang SC"; color: #000000; min-height: 20.0px }
p.p5 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC"; color: #008400 }
p.p6 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #703daa }
p.p7 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #008400 }
p.p8 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 17.0px; font: 14.0px "Songti SC"; color: #000000; min-height: 20.0px }
p.p9 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC"; color: #404040 }
p.p10 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 16.0px; font: 14.0px Menlo; color: #000000 }
p.p11 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 16.0px; font: 14.0px "PingFang SC"; color: #000000 }
p.p12 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 24.4px; font: 14.0px "PingFang SC"; color: #000000 }
span.s1 { }
span.s2 { font: 14.0px "PingFang SC" }
span.s3 { font: 14.0px Menlo }
span.s4 { }
span.s5 { font: 14.0px Menlo; color: #000000 }
span.s6 { color: #703daa }
span.s7 { color: #3e1e81 }
span.s8 { color: #000000 }
span.s9 { color: #ba2da2 }
span.s10 { color: #31595d }
span.s11 { color: #4f8187 }
span.s12 { color: #272ad8 }
span.s13 { color: #008400 }
span.s14 { font: 14.0px "PingFang SC"; color: #008400 }
span.s15 { color: #000000 }
span.s16 { font: 14.0px "PingFang SC" }
span.s17 { font: 14.0px Menlo }
span.s18 { color: #000080 }
span.s19 { color: #0000ff }

一、AutoLayout基本概念:

1、利用约束来控制视图的大小和位置,系统会在运行时通过设置的约束计算得到frame再绘制屏幕。Autolayout提供的两个关键词是:约束,参照,Autolayout其实核心思想是设置frame,再确定视图的位置与尺寸。

2、两个属性Content Compression Resistance(排挤,值越高越固定)和Content Hugging(拥抱)

3、preferredMaxLayoutWidth用来制定最大的宽,一般用在多行的UILabel中

4、systemLayoutSizeFittingSize方法能够获得view的高度

5、iOS7有两个很有用的属性,topLayoutGuide和bottomLayoutGuide,这个两个主要是方便获取UINavigationController和UITabBarController的头部视图区域和底部视图区域。

二、AutoLayout一些方法的区别:

1、setNeedsLayout:告知页面需要更新,但是不会立刻开始更新。执行后会立刻调用layoutSubviews。

2、layoutIfNeeded:告知页面布局立刻更新。所以一般都会和setNeedsLayout一起使用。如果希望立刻生成新的frame需要调用此方法,利用这点一般布局动画可以在更新布局后直接使用这个方法让动画生效。

3、layoutSubviews:系统重写布局

4、setNeedsUpdateConstraints:告知需要更新约束,但是不会立刻开始

5、updateConstraintsIfNeeded:告知立刻更新约束

6、updateConstraints:系统更新约束

三、Masonry基本概念:

1、Masonry 是一个对系统 NSLayoutConstraint 进行封装的第三方自动布局框架,采用链式编程的方式提供给开发者 API 。系统 AutoLayout 支持的操作, Masonry 都支持。

2、Masonry 采取了链式编程的方式,代码理解起来非常清晰易懂,而且写完之后代码量看起来非常少。之前用 NSLayoutConstraint 写很多代码才能实现的布局,用 Masonry 最少一行代码就可以搞定。

3、Masonry 是同时支持 Mac 和 iOS 两个平台的,在这两个平台上都可以使用 Masonry 进行自动布局。

四、Masonry使用注意事项:

1、在使用 Masonry 添加约束之前,需要在 addSubview 之后才能使用,否则会导致崩溃。

2、在添加约束时初学者经常会出现一些错误,约束出现问题的原因一般就是两种:约束冲突和缺少约束。对于这两种问题,可以通过调试和 log 排查。

3、之前使用 Interface Builder 添加约束,如果约束有错误直接就可以看出来,并且会以红色或者黄色警告体现出来。而 Masonry 则不会直观的体现出来,而是以运行过程中崩溃或者打印异常 log 体现,所以这也是手写代码进行 AutoLayout 的一个缺点。

4、mas_equalTo适用数值元素,equalTo适合多属性的比如make.left.and.right.equalTo(self.view)

5、方法and和with只是为了可读性,返回自身,比如make.left.and.right.equalTo(self.view)和make.left.right.equalTo(self.view)是一样的。

6、因为iOS中原点在左上角所以注意使用offset时注意right和bottom用负数。

7、开发项目时是先在iOS8上调试完成的,测试时发现iOS7以下低版本的系统会发生奔溃的现象,修复后总结问题主要是在equalTo的对象指到了父视图的父视图或者父视图同级的子视图上造成的。

五、示例代码如下:

//红,绿,蓝,紫

UIView* redView=[[UIView alloc]init];

redView.backgroundColor=[UIColor redColor];

[self.view addSubview:redView];

[redView mas_makeConstraints:^(MASConstraintMaker *make) {

make.top.equalTo(self.view.mas_top).offset(0);

make.left.equalTo(self.view.mas_left).offset(0);

//设置宽度为self.view的一半,multipliedBy是倍数的意思,也就是,使宽度等于self.view宽度的0.5倍

make.width.equalTo(self.view.mas_width).multipliedBy(0.5);

make.height.equalTo(self.view.mas_height).multipliedBy(0.5);

}];

UIView* greenView=[[UIView alloc]init];

greenView.backgroundColor=[UIColor greenColor];

[self.view addSubview:greenView];

[greenView mas_makeConstraints:^(MASConstraintMaker *make) {

make.top.equalTo(redView.mas_top);//与redView顶部对齐

make.left.equalTo(redView.mas_right);

make.width.and.height.equalTo(redView);

}];

UIView* blueView=[[UIView alloc]init];

blueView.backgroundColor=[UIColor blueColor];

[self.view addSubview:blueView];

[blueView mas_makeConstraints:^(MASConstraintMaker *make) {

make.leading.equalTo(redView);//与redView左对齐

make.top.equalTo(redView.mas_bottom);

make.width.and.height.equalTo(redView);

}];

UIView* purpleView=[[UIView alloc]init];

purpleView.backgroundColor=[UIColor purpleColor];

[self.view addSubview:purpleView];

[purpleView mas_makeConstraints:^(MASConstraintMaker *make) {

make.top.equalTo(greenView.mas_bottom);

make.left.equalTo(blueView.mas_right);

make.width.and.height.equalTo(redView);

}];

六、计算UITableView动态Cell高度:

// 设置tableView自动高度

_tableView.rowHeight = UITableViewAutomaticDimension;

[self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {

make.edges.equalTo(self.view);

}];

- (CGFloat)tableView:(UITableView *)tableViewestimatedHeightForRowAtIndexPath:(NSIndexPath      *)indexPath {

return 40.f;

}

七、UIScrollView自动布局:

self.scrollView.contentSize = CGSizeMake(1000, 1000);

[self.scrollViewmas_makeConstraints:^(MASConstraintMaker *make) {

make.edges.equalTo(self.view);

}];

时间: 2024-10-10 16:46:09

iOS开发中Masonry的使用总结:的相关文章

iOS开发中UIPopoverController的使用详解

这篇文章主要介绍了iOS开发中UIPopoverController的使用,代码基于传统的Objective-C,需要的朋友可以参考下 一.简单介绍 1.什么是UIPopoverController 是iPad开发中常见的一种控制器(在iPhone上不允许使用) 跟其他控制器不一样的是,它直接继承自NSObject,并非继承自UIViewController 它只占用部分屏幕空间来呈现信息,而且显示在屏幕的最前面 2.使用步骤 要想显示一个UIPopoverController,需要经过下列步骤

iOS开发中一些有用的小代码

1.判断邮箱格式是否正确的代码: //利用正则表达式验证 -(BOOL)isValidateEmail:(NSString *)email { NSString *emailRegex = @"[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"; NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES%@&qu

IOS开发中使用CNContact对通讯录增删改查

IOS开发中使用CNContact对通讯录增删改查 首先当然是把CNcontact包含在工程中: 1 @import Contacts; 1.下面是增加联系人的程序段: 1 CNMutableContact * contact = [[CNMutableContact alloc]init]; 2 contact.imageData = UIImagePNGRepresentation([UIImage imageNamed:@"22"]); 3 //设置名字 4 contact.gi

ios开发中-AFNetworking 的简单介绍

Blog: Draveness 关注仓库,及时获得更新: iOS-Source-Code-Analyze 在这一系列的文章中,我会对 AFNetworking 的源代码进行分析,深入了解一下它是如何构建的,如何在日常中完成发送 HTTP 请求.构建网络层这一任务. AFNetworking 是如今 iOS 开发中不可缺少的组件之一.它的 github 配置上是如下介绍的: Perhaps the most important feature of all, however, is the ama

iOS 开发中用户记住账户,密码

在iOS开发中经常会用到记住账户.密码,以此来提高用户的体验.下面就浅谈一下账户.密码的存储. 一.登录 记录已登录用户步骤,存入偏好设置中存储放入一个数组. 具体存储 1:存储用户到偏好设置中,其中用户是一个数组向服务器响应客户端后的一些操作(如果响应数据成功)其中用户和密码是一一对应的 1.1先从沙盒中偏好设置中读取对应的用户集合 读取用户名: NSMutableArray *AccArys = [NSMutableArray arrayWithArray:[[NSUserDefaults

iOS开发中KVC、KVO简介

在iOS开发中,KVC和KVO是经常被用到的.可以使用KVC对对象的属性赋值和取得对象的属性值,可以使用KVO监听对象属性值的变化.简单介绍一下KVC和KVO. 一:键值编码(KVC) KVC,全称 Key Value Coding(键值编码),是OC 语言的一个特性,使用KVC,可以对对象的属性进行动态读写. KVC的操作方法由 NSKeyValueCoding协议提供,而NSObject已经实现了这个协议,因此OC中的几乎所有对象都可以使用KVC操作.常用的KVC操作方法有: (1)设置属性

iOS开发中打电话发短信等功能的实现

在APP开发中,可能会涉及到打电话.发短信.发邮件等功能.比如说,通常一个产品的“关于”页面,会有开发者的联系方式,理想情况下,当用户点击该电话号码时,能够自动的帮用户拨出去,就涉及到了打电话的功能. iOS开发中,有三种方式可以打电话: (1)直接跳到拨号界面,代码如下 1 2 NSURL *url = [NSURL URLWithString:@"tel://10010"];  [[UIApplication sharedApplication] openURL:url]; 缺点:

iOS开发——淫技篇&iOS开发中各种淫技总结(六)

iOS开发中各种淫技总结(六) swift中指针的使用 在 Swift 中,指针都使用一个特殊的类型来表示,那就是 UnsafePointer<T>.遵循了 Cocoa 的一贯不可变原则,UnsafePointer<T> 也是不可变的.当然对应地,它还有一个可变变体,UnsafeMutablePointer<T>.绝大部分时间里,C 中的指针都会被以这两种类型引入到 Swift 中:C 中 const 修饰的指针对应 UnsafePointer (最常见的应该就是 C

iOS开发中的压缩以及解压

事实上,在iOS开发中,压缩与解压,我都是采用第三方框架SSZipArchive实现的 gitHub地址:   https://github.com/ZipArchive/ZipArchive 上面有详细的使用方法 因为ZipArchive不支持ARC,所以如果你的工程开启了ARC,那么就需要对ZipArchive设置一下.在ZipArchive.mm编译选项中,增加-fno-objc-arc即可. 最后,需要为工程链接libz.dylib动态链接库. 使用示范(压缩): // 获得mainBu