Masonry介绍

Masonry是一个iOS开发布局框架,可以适配各种机型,相比原生的NSLayoutConstraint,提高了使用容易度和代码的可阅读程度。

首先需要准备的点:

使用Masonry需要配置Cocoapods环境和安装Masonry第三方库
参考如下:
配置Cocoapods环境:2021年CocoaPods安装方法(这里推荐一位大佬的博客)
其中关键的点有:没有rvm的一定要按照给的方法安装rvm,如果失败就换个网络多试几次,安装rvm后需要按照所给的方法去安装ruby3.0(由于Big Sur系统的m1 mac现版本系统默认的是ruby2.6),完成上方的操作后最后再按流程完成其余的简单步骤即可实现配置Cocoapods环境

安装Masonry第三方库流程如下

  1. Xcode新建一个项目,用终端cd到项目目录下
  2. 再到终端中输入 pod init 来创建一个Podfile文件
  3. 接着再到终端中输入 open Podfile 来打开Podfile文件
  4. 在文件中添加 pod ‘Masonry’ 这句话并保存退出
  5. 最后在终端中输入 pod install 开始下载该第三方库

其中最后一步的pod install常常会由于网络等因素而下载失败,如果失败的话多试几次或者换个网络试,直到成功即可,成功之后打开项目只需要点击xxx.xcworkspace文件即可

Masonry的使用

重要的点

  1. 在需要使用Masonry来添加约束的文件中要写#import "Masonry.h"来引用Masonry文件。
  2. 使用Masonry添加约束需要在addSubview方法之后,否则程序会报错。

Masonry的使用其实就是对于其中的API的使用,一些基础的API如下:

//添加约束
mas_makeConstraints()
//移除之前的约束,重新添加新的约束
mas_remakeConstraints()
//更新约束,写哪条更新哪条,其他约束不变
mas_updateConstraints()//equalTo的类型为id,里面不能直接填数字,例如如果非要填,括号里就要填成@100等(数字前面加@):
equalTo()
//和上面功能相同,参数可以传递基础数据类型对象,可以理解为比上面的API更强大,例如要添加数字时就可以直接写成100等
mas_equalTo()
//顶部距离父视图的mas_top有+x个单位(x为实际括号里所输入的值),规定向下为正
mas_offset()//用来表示宽度,例如代表view的宽度
width()
//用来获取宽度的值。和上面的区别在于,一个代表某个坐标系对象,一个用来获取坐标系对象的值
mas_width()

更新约束:(苹果官方建议:添加/更新约束在方法:updateConstraints内)代码如下:

//例如点击一个按钮后更新约束,则代码写在按钮的点击时间中,如下:
- (void) pressButton:(UIButton *)button {//方法有三种,分别如下://1.告知需要更新约束,但不会立刻开始,系统然后调用updateConstraints[self setNeedsUpdateConstraints];//2.告知立刻更新约束,系统立即调用updateConstraints[self updateConstraintsIfNeeded];//3.这里动画当然可以取消,具体看项目的需求//系统block内引用不会导致循环引用,block结束就会释放引用对象[UIView animateWithDuration:0.4 animations:^{[self layoutIfNeeded]; //告知页面立刻刷新,系统立即调用updateConstraints}];
}//在方法:updateConstraints内更新约束
- (void)updateConstraints {//更新约束[self.xxx updateConstraints:^(MASConstraintMaker *make) {//code}];//最后必须调用父类的更新约束[super updateConstraints];
}//设置requiresConstraintBasedLayout为YES
+ (BOOL)requiresConstraintBasedLayout{return YES ;
}

一个Masonry使用的最基础的例子:

例如将视图二添加到视图一上这样一个简单的层级关系:

- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view.self.view.backgroundColor = [UIColor whiteColor];//使用Masonry布局,基本可以抛弃CGRectMake了,直接初始化即可UIView *firstView = [[UIView alloc] initWithFrame:CGRectZero];firstView.backgroundColor = [UIColor orangeColor];UIView *secondView = [[UIView alloc] initWithFrame:CGRectZero];secondView.backgroundColor = [UIColor greenColor];//在做布局之前,一定要先将view添加到superview上,否则会报错[self.view addSubview:firstView];[firstView addSubview:secondView];//mas_makeConstrains就是Masonry的autolayout添加函数,将所需的约束添加到block中就行[firstView mas_makeConstraints:^(MASConstraintMaker *make) {//规定当前视图距离父视图顶端的距离make.top.mas_offset(100);//规定当前视图距离父视图左端的距离make.left.mas_equalTo(20);//规定当前视图自身的宽度make.width.mas_offset(250);//规定当前视图自身的高度make.height.mas_equalTo(250);}];[secondView mas_makeConstraints:^(MASConstraintMaker *make) {//规定当前视图距离父视图顶端的距离make.top.mas_offset(25);//规定当前视图距离父视图左端的距离make.left.mas_equalTo(25);//规定当前视图自身的宽度make.width.mas_offset(200);//规定当前视图自身的高度make.height.mas_equalTo(200);}];
}
@end

最终的显示效果:

Masonry Demo

[iOS]-Masonry的使用相关推荐

  1. iOS Masonry的使用详解

    Masonry是一个轻量级的布局框架,拥有自己的描述语法,采用更优雅的链式语法封装自动布局,简洁明了并具有高可读性,而且同时支持 iOS 和 Max OS X.Masonry是一个用代码写iOS或OS ...

  2. iOS - Masonry自动布局

    简介: 相对于官方的NSLayoutConstraints的的过于繁琐和麻烦,Masonry是一个轻量级的布局框架 拥有自己的描述语法 采用更优雅的链式语法封装自动布局 简洁明了 并具有高可读性 而且 ...

  3. iOS -- masonry的使用

    文章目录 安装masonry 使用masonry masonry基本使用 使用masonry实现视图重叠的demo 安装masonry 根据博客cocoapods安装 masonry使用 完成maso ...

  4. iOS Masonry

    文章目录 Masonry简介 Masonry主要的类和常用api Masonry基本使用 Masonry结构与源码简单解析 Masonry使用技巧与注意事项 Masonry简介 Masonry利用简化 ...

  5. iOS Masonry介绍与使用实践(快速上手Autolayout)

    前言 MagicNumber -> autoresizingMask -> autolayout 以上是纯手写代码所经历的关于页面布局的三个时期 在iphone1-iphone3gs时代 ...

  6. IOS Masonry介绍与使用实践:快速上手Autolayout

    转载大神:http://www.cocoachina.com/ios/20141219/10702.html 前言 MagicNumber -> autoresizingMask -> a ...

  7. IOS Masonry自动布局

    之前项目用Frame布局,这个项目登录用了VFL,后来觉得用Masonry,前天布局TableViewCell时用了下 ,觉得还不错. #import "Masonry.h" #i ...

  8. iOS Masonry详解mas_makeConstraints() 添加约束 mas_remakeConstraints() 移除之前的约束,重新添加新的约束 mas_updateConst

    现在iPhone手机屏幕越来越多, 屏幕适配也越来越重要. Masonry就是为屏幕适配而生的三方框架. Masonry基础API mas_makeConstraints() 添加约束 mas_rem ...

  9. html布局优先级,iOS Masonry 设置布局优先级。

    Masonry 中设置布局优先级需要使用系统方法: 设置抗拉伸性.值越低越容易被拉伸 - (void)setContentHuggingPriority:(UILayoutPriority)prior ...

最新文章

  1. 销售自己使用过的小汽车纳多少增值税
  2. Java Annotation(注解)使用教程
  3. python用户登录三次机会的注释_用户登录(三次错误机会)(示例代码)
  4. 你在成长为一个优秀的程序员吗
  5. Clojure 学习入门(14)- 循环控制
  6. HCIE-RS面试----数据帧格式
  7. 大数据工程师简历_大数据工程师简历专业技能怎么写
  8. java实现登录注册界面
  9. 利用支付宝短信服务接口 实现手机号 验证码登录Demo
  10. 我的2021年终总结
  11. 提高网站关键词排名优化技巧!
  12. 谷歌AI聊天机器人Bard答错问题,股价大跌7.4%;淘宝屏蔽ChatGPT;孟晚舟4月将首次当值华为轮值董事长丨每日大事件...
  13. redirect重定向
  14. P6 EPPM 安装与配置指南 16 R1 2016.4
  15. 面向对象 -- 基础(A版)
  16. 如何设计 QQ、微信等第三方账号登陆 ?
  17. 怎么剪辑视频,这几个技巧必须学会
  18. 矩阵理论| 基础:特征值与特征向量、代数重数/几何重数、相似对角化和Jordan标准型
  19. windows防火墙是干什么的_windows的防火墙
  20. 6 个自动化脚本,杀疯了

热门文章

  1. 怎么提升个人的代码编写能力
  2. 【NOIP2014】提高组初赛答案加解析
  3. 从 S7-300/400 软冗余到 S7-1500R/H 冗余系统
  4. Python实现中文转拼音功能
  5. 学院新闻报道,邹老师光临指导
  6. Java并发编程的艺术(推荐指数:☆☆☆☆☆☆)
  7. sdkd2019.3.20训练题目
  8. 402-字符串(题目:剑指Offer58-II.左旋转字符串、 28. 实现 strStr()、459.重复的子字符串)
  9. AirServer2022苹果安卓手机屏幕如何投影到电脑上面
  10. 基于VCP虚拟串口的Rosserial接口教程