当前位置: 首页 > news >正文

AutoLayout与Masonry:简化iOS布局

Auto Layout 与 Masonry

苹果提供的自动布局(Auto Layout)能够对视图进行灵活有效的布局。但是,使用原生的自动布局相关的语法创建约束的过程是非常冗长的,可读性也比较差。

Masonry 的目标其实就是 为了解决原生自动布局语法冗长的问题

其实说到本质,它和手动布局是一样的。对一个控件放在哪里,我们依然只关心它的(x, y, width, height)。但手动布局的方式是,一次性计算出这四个值,然后设置进去,完成布局。但当父控件或屏幕发生变化时,子控件的计算就要重新来过,非常麻烦。

因此,在自动布局中,我们不再关心(x, y, width, height)的具体值,我们只关心(x, y, width, height)四个量对应的约束。

约束

添加约束的规则:

如果两个控件是父子控件,则添加到父控件中。

如果两个控件不是父子控件,则添加到层级最近的共同父控件中。

我们查看源码:

基本属性

添加约束的三种方法:

Masonry是基于AutoLayout实现计算视图Frame的

// 定义这个常量,就可以不用在开发过程中使用"mas_"前缀。
#define MAS_SHORTHAND
// 定义这个常量,就可以让Masonry帮我们自动把基础数据类型的数据,自动装箱为对象类型。
#define MAS_SHORTHAND_GLOBALS

Masonry的使用:

mas_equalTo和equalTo的区别

用法

常见场景

例子

equalTo(view)

对齐某个 view 的同属性

make.left.equalTo(self.view)

equalTo(view.mas_xxx)

对齐某个 view 的特定属性

make.left.equalTo(otherView.mas_right)

equalTo(@数值)

固定数值(必须手动包对象)

make.width.equalTo(@100)

mas_equalTo(数值)

固定数值、结构体(推荐写法)

make.width.mas_equalTo(100

 [button mas_makeConstraints:^(MASConstraintMaker *make) {make.top.equalTo(self.view).offset(20)make.bottom.equalTo(self.view).offset(0);make.right.equalTo(self.view).offset(10);make.left.equalTo(self.view).offset(200);make.centerX.equalTo(self.view);//水平居中make.centerY.equalTo(self.view);//垂直居中make.width.height.mas_equalTo(60);make.edges.equalTo(self.view).insets(UIEdgeInsetsMake(20, 20, 20, 20));//四周都留20make.width.equalTo(self.view).multipliedBy(0.5); //宽度 = 父视图的一半}];

下图为使用Masonry实现的折叠cell demo。

- (void)viewDidLoad {[super viewDidLoad];self.foldTableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];self.foldTableView.delegate = self;self.foldTableView.dataSource = self;[self.view addSubview:self.foldTableView];[self.foldTableView mas_makeConstraints:^(MASConstraintMaker *make) {make.left.equalTo(self.view).offset(200);make.top.equalTo(self.view).offset(300);make.width.mas_equalTo(100);make.height.mas_equalTo(30);}];self.array = [NSMutableArray arrayWithObjects:@"1", @"2", @"3", @"4", @"5", nil];self.btn = [UIButton buttonWithType:UIButtonTypeCustom];[self.btn setImage:[UIImage imageNamed:@"kaiqi"] forState:UIControlStateNormal];[self.btn setImage:[UIImage imageNamed:@"guanbi"] forState:UIControlStateSelected];[self.btn addTarget:self action:@selector(press:) forControlEvents:UIControlEventTouchUpInside];[self.view addSubview:self.btn];[self.btn mas_makeConstraints:^(MASConstraintMaker *make) {make.left.equalTo(self.view).offset(270);make.top.equalTo(self.view).offset(300);make.width.mas_equalTo(40);make.height.mas_equalTo(40);}];
}


文章转载自:

http://lvrRV7rW.zcqtr.cn
http://RKGc81KF.zcqtr.cn
http://SeJTIFpl.zcqtr.cn
http://ipSder1t.zcqtr.cn
http://lwElya3L.zcqtr.cn
http://JuGNPtpk.zcqtr.cn
http://L1DG0aEH.zcqtr.cn
http://ZJAi5Pw2.zcqtr.cn
http://MwHGaFus.zcqtr.cn
http://nkHKgtY5.zcqtr.cn
http://PAwybppU.zcqtr.cn
http://d3vIPqcd.zcqtr.cn
http://kD3s3Lm7.zcqtr.cn
http://Dh4i4PJj.zcqtr.cn
http://B2VuuZhR.zcqtr.cn
http://DmMicrFU.zcqtr.cn
http://jsM8GXpn.zcqtr.cn
http://rfMAOpjU.zcqtr.cn
http://ct2MAnyp.zcqtr.cn
http://pz3PKUQ4.zcqtr.cn
http://FYpSzcUE.zcqtr.cn
http://sqvZCRtI.zcqtr.cn
http://JeuBS9VM.zcqtr.cn
http://7VW0d8By.zcqtr.cn
http://XWgn93ht.zcqtr.cn
http://LoKFVSNL.zcqtr.cn
http://NjQ3EJaE.zcqtr.cn
http://p7puAgmE.zcqtr.cn
http://ul9Jy7yC.zcqtr.cn
http://zxFMyDSq.zcqtr.cn
http://www.dtcms.com/a/367396.html

相关文章:

  • 《计算机网络安全》实验报告一 现代网络安全挑战 拒绝服务与分布式拒绝服务攻击的演变与防御策略(2)
  • upload-labs通关笔记-第17关文件上传关卡之二次渲染jpg格式
  • 人工智能机器学习——逻辑回归
  • Java Web 是技术与产业的 “交叉赋能点”
  • Linux笔记---UDP套接字实战:简易聊天室
  • 新增MCP工具管理,AI对话节点新增工具设置,支持对接企业微信机器人,MaxKB v2.1.0版本发布
  • 2025年数学建模国赛C题超详细解题思路
  • 【论文阅读】-《Besting the Black-Box: Barrier Zones for Adversarial Example Defense》
  • 小迪web自用笔记27
  • 不会战略、不会融资、不会搭团队?别叫自己 CTO
  • ⸢ 肆 ⸥ ⤳ 默认安全建设方案:b.安全资产建设
  • 【高分论文密码】大尺度空间模拟预测与数字制图
  • 机器翻译:腾讯混元团队开源的模型 Hunyuan-MT 详解
  • #数据结构----2.1线性表
  • IT需求提示未读信息查询:深度技术解析与性能优化指南【类似:钉钉已读 功能】
  • RAG(检索增强生成)-篇一
  • 解密注意力机制:为何它能在Transformer中实现高效并行计算?
  • 2025跨境独立站最新最完整的搭建流程
  • 2025年百度商业AI技术创新大赛赛道二:视频广告生成推理性能优化-初赛第五名,复赛第九名方案分享
  • VS code如何下载安装
  • 跨部门共享研发文档总是困难重重该如何改善
  • 关于如何在PostgreSQL中调整数据库参数和配置的综合指南
  • 若依微服务遇到的配置问题
  • Cadence OrCAD Capture绘制复用管脚封装的方法图文教程
  • LLM中的function call
  • 残差网络的介绍
  • cursor+python轻松实现电脑监控
  • 梯度爆炸问题:深度学习中的「链式核弹」与拆弹指南
  • JavaAI炫技赛:电商系统商品管理模块设计与实现——基于Spring AI的商品智能上架全流程解析
  • G2D 图形加速器