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://www.pswp.cn/web/95591.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/95591.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从设计到落地:校园图书馆系统的面向对象实现全流程

很多小白学面向对象时总困惑:“类图、用例图我会画,但怎么把这些设计变成能跑的代码?” 这篇文章就用 “校园图书馆管理系统” 当例子,从需求分析→设计方案→代码实现→测试验证,带你走通 “设计→实现” 的完整链路&…

[鸿蒙心迹]带新人学鸿蒙的悲欢离合

2023年底,我和陆神,威哥,老罗一起去深圳参加了鸿蒙师资培训正式开启了鸿蒙之旅,当时和陆神拍的合照但是我把陆神打码了 学完以后就考取了鸿蒙的高级认证 看到没有时间是2023年11月 马上都要到期了。 想一想时间过得真快&#xff…

MindShow AI:AI思维导图生成工具高效解决思路混乱难题,快速搭建学习与工作大纲

你有没有过这种时候?想整理一份学习大纲或者项目方案,脑子裡一堆想法却散得像乱麻 —— 比如要做个 “数据分析入门规划”,明明知道要学 Excel、SQL、Python,可怎么分阶段、每个阶段学哪些重点,对着空白文档半天列不出…

快速搭建一个Vue+TS+Vite项目

1、在一个文件夹下通过cmd打开,输入命令npm create vitelatest命名要为英文2.选择项目框架通过上下键位选择Vue框架:选好按回车键3.选择开发语言选择TypeScript语言,方便后续开发:创建好的项目目录为:4.安装Vite依赖接…

深度学习:ResNet 残差神经网络详解

一、ResNet 残差神经网络的起源与核心地位ResNet(Residual Neural Network,残差神经网络)是 2015 年由微软亚洲研究院的何凯明、张祥雨等研究者提出的深度神经网络架构。在当年的 ImageNet 大规模视觉识别挑战赛(ILSVRC&#xff0…

Python面试题及详细答案150道(116-125) -- 性能优化与调试篇

《前后端面试题》专栏集合了前后端各个知识模块的面试题,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs,nodejs,mangoDB,SQL,Linux… 。 前后端面试题-专栏总目录 文章目录 一、本文面试题目录 116. 如何查找Python程序的…

C++11 智能指针的使⽤及其原理

目录 1. 智能指针的使⽤场景分析 2. RAII和智能指针的设计思路 3. C标准库智能指针的使⽤ 4. 智能指针的原理 5. shared_ptr和weak_ptr 5.1 shared_ptr循环引⽤问题 5.2 weak_ptr 6. shared_ptr的线程安全问题 7. C11和boost中智能指针的关系 8. 内存泄漏 8.1 什么是…

【Linux】Linux进程状态和僵尸进程:一篇看懂“进程在忙啥”

前言:欢迎各位光临本博客,这里小编带你直接手撕Make/Makefile (自动化构建),文章并不复杂,愿诸君耐其心性,忘却杂尘,道有所长!!!! **🔥个人主页&a…

开源视频剪辑工具推荐

开源视频剪辑和处理工具近年来发展非常迅速,许多工具的功能已经足以媲美甚至超越一些商业软件。以下是一些顶级的开源视频编辑和处理工具,涵盖了从简单易用到专业级别的不同需求。 一、 主要视频编辑软件(非线性编辑,NLE&#xf…

第十四届蓝桥杯青少组C++国赛[2023.5.28]第二部分编程题(4、 数独填数)

参考程序&#xff1a;#include <bits/stdc.h> using namespace std;char board[9][9];// 检查在 (r,c) 填 num 是否有效 bool isValid(int r, int c, char num) {for (int i 0; i < 9; i) {if (board[r][i] num) return false; // 同行if (board[i][c] num) r…

C语言中奇技淫巧08-使用alloca/__builtin_alloca从栈上分配空间

alloca是什么? alloca 是一个非标准但广泛支持的 C 语言函数&#xff0c;用于在当前函数的栈&#xff08;stack&#xff09;上动态分配内存。 与 malloc 的区别&#xff1a; malloc 在堆&#xff08;heap&#xff09; 上分配内存&#xff0c;需要手动调用 free 释放。alloca 在…

【Markdown转Word完整教程】从原理到实现

Markdown转Word完整教程&#xff1a;从原理到实现 前言 在技术文档编写和学术论文创作中&#xff0c;Markdown因其简洁的语法和良好的可读性而广受欢迎。然而&#xff0c;在实际工作中&#xff0c;我们经常需要将Markdown文档转换为Word格式&#xff0c;以便与同事协作、提交正…

IBM穿孔卡片:现代计算技术的奠基之作

本文由「大千AI助手」原创发布&#xff0c;专注用真话讲AI&#xff0c;回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我&#xff0c;一起撕掉过度包装&#xff0c;学习真实的AI技术&#xff01; 1 打孔卡概述 穿孔卡片&#xff08;Punch Card&#xff09;又称打孔卡…

亚马逊旺季来临如何用woot冲刺

在亚马逊旺季来临之际&#xff0c;使用Woot冲刺需结合新品推广、老品激活、库存清理等不同场景&#xff0c;通过精准选品、活动设置、广告配合及数据监控实现销量与排名的双重提升。以下是具体操作指南&#xff1a;一、精准选品&#xff1a;匹配提报条件新品期选品标准&#xf…

AlexNet:计算机视觉的革命性之作

AlexNet: Revolutionizing Deep Learning for Computer Vision (1)网络提出的背景 论文题目:ImageNet Classification with Deep Convolutional Neural Networks arXiv地址:https://arxiv.org/abs/1207.0575 在2012年ImageNet大规模视觉识别挑战赛(ILSVRC)中,AlexNet以15…

【高等数学】第十一章 曲线积分与曲面积分——第二节 对坐标的曲线积分

上一节&#xff1a;【高等数学】第十一章 曲线积分与曲面积分——第一节 对弧长的曲线积分 总目录&#xff1a;【高等数学】 目录 文章目录1. 对坐标的曲线积分的概念与性质1. 对坐标的曲线积分的概念与性质 变力沿曲线所作的功 先用曲线 LLL 上的点 M1(x1,y1),M2(x2,y2),…,M…

解析SQL Server核心服务与功能

SQL Server 安装后会在 Windows 系统中注册多个服务&#xff0c;每种服务负责不同的功能。主要服务类型包括&#xff1a; &#x1f4cc; 核心服务 (必须或常用)SQL Server Database Engine (数据库引擎服务) 服务名称格式&#xff1a; MSSQL$<InstanceName> (命名实例) 或…

专项智能练习(计算机动画基础)

1.小明在制作Flash作品时&#xff0c;舞台及库中素材如第下图所示&#xff0c;把“马”元件插入到“马”图层第1帧并放在舞台的草地位置&#xff0c;发现舞台中并无马图像显示&#xff0c;下列情形中最有可能的是&#xff08; &#xff09;。A.“马”图层已被锁定 B.“马”图层…

第三方库集成:结合 Express.js 构建本地服务器

引言&#xff1a;Express.js 在 Electron 第三方库集成中的本地服务器构建价值 在 Electron 框架的第三方库集成生态中&#xff0c;Express.js 作为 Node.js 的经典 Web 框架&#xff0c;扮演着构建本地服务器的关键角色。它不仅仅是一个路由和中间件工具&#xff0c;更是 Elec…

百度地图+vue+flask+爬虫 推荐算法旅游大数据可视化系统Echarts mysql数据库 带沙箱支付+图像识别技术

F012 百度地图vueflask爬虫 推荐算法旅游大数据可视化系统Echarts mysql数据库 带沙箱支付图像识别技术 &#x1f4da;编号&#xff1a; F012 文章结尾部分有CSDN官方提供的学长 联系方式名片 博主开发经验15年,全栈工程师&#xff0c;专业搞定大模型、知识图谱、算法和可视化…