【Masonry】使用技巧 - 篇一
从别人项目得到的灵感 : 请看以下代码
UIColor *darkColor = [UIColor colorWithHexString:@"0x28303b"];
// 1. 确定宽高
CGFloat buttonWidth = kScreen_Width * 0.4;
CGFloat buttonHeight = kScaleFrom_iPhone5_Desgin(); // 2. 设置按钮基本属性
self.registerBtn = ({
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button addTarget:self action:@selector(registerBtnClicked) forControlEvents:UIControlEventTouchUpInside]; button.backgroundColor = darkColor;
button.titleLabel.font = [UIFont boldSystemFontOfSize:];
[button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[button setTitle:@"注册" forState:UIControlStateNormal]; button.layer.masksToBounds = YES;
button.layer.cornerRadius = buttonHeight/;
button;
});
self.loginBtn = ({
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button addTarget:self action:@selector(loginBtnClicked) forControlEvents:UIControlEventTouchUpInside]; button.backgroundColor = [UIColor clearColor];
button.titleLabel.font = [UIFont boldSystemFontOfSize:];
[button setTitleColor:darkColor forState:UIControlStateNormal];
[button setTitle:@"登录" forState:UIControlStateNormal]; button.layer.masksToBounds = YES;
button.layer.cornerRadius = buttonHeight/;
button.layer.borderWidth = 1.0;
button.layer.borderColor = darkColor.CGColor;
button;
});
// 3.添加控件
[self.view addSubview:self.registerBtn];
[self.view addSubview:self.loginBtn];
// 4.设置约束
[self.registerBtn mas_makeConstraints:^(MASConstraintMaker *make) {
make.size.mas_equalTo(CGSizeMake(buttonWidth, buttonHeight));
make.right.equalTo(self.view.mas_centerX).offset(-paddingToCenter);
make.bottom.equalTo(self.view).offset(-paddingToBottom);
}];
[self.loginBtn mas_makeConstraints:^(MASConstraintMaker *make) {
make.size.mas_equalTo(CGSizeMake(buttonWidth, buttonHeight));
make.left.equalTo(self.view.mas_centerX).offset(paddingToCenter);
make.bottom.equalTo(self.view).offset(-paddingToBottom);
}];
四部曲,一气呵成, 语义也非常清晰.
接下来可以详细看看Masonry框架的用法.
总的来说,我觉得Autolayout的关键就是“Constraint(约束)”。其实就是以下两点:
- 从显式设置frame的属性,到利用约束控制View的大小、位置。
- 思考如何布局时,重点从单个的View,到整体所有View之间的相互关系。
既然没有了具体设置View的frame属性,也就是说,系统会在运行时,通过我们设定的“约束”,计算出每个View的frame,再去绘制屏幕内容。
也就是说,我们设置的Constraint,要能体现出View的位置(x、y坐标)、大小(宽高)。
所以千言万语就是一句话 , 想想你的UI是怎样设定Frame的
解释一些句子 :
【Masonry】使用技巧 - 篇一的更多相关文章
- FastReport 使用技巧篇
使用技巧篇 1.FastReport中如果访问报表中的对象? 可以使用FindObject方法. TfrxMemoView(frxReport1.FindObject('memo ...
- 2天驾驭DIV+CSS (技巧篇)(转)
这是去年看到的一片文章,感觉在我的学习中,有不少的影响.于是把它分享给想很快了解css的兄弟们.本文是技巧篇. 基础篇[知识一] “DIV+CSS” 的叫法是不准确的[知识二] “DIV+CSS” ...
- Visual Studio调试之断点技巧篇补遗
原文链接地址:http://blog.csdn.net/Donjuan/article/details/4649372 讲完Visual Studio调试之断点技巧篇以后,翻翻以前看得一些资料和自己写 ...
- Blend_技巧篇_淡入淡出
原文:Blend_技巧篇_淡入淡出 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u010265681/article/details/766517 ...
- Blend_技巧篇_导入PSD文件制作ToggleButton (Z)
原文:Blend_技巧篇_导入PSD文件制作ToggleButton (Z) 系统: Win7sp1 32位 IDE: Microsoft VisualStudio 2013 Ultimate Ble ...
- Gatling脚本编写技巧篇(二)
脚本示例: import io.gatling.core.Predef._ import io.gatling.http.Predef._ import scala.concurrent.durati ...
- 《手把手教你》系列技巧篇(六)-java+ selenium自动化测试-阅读selenium源码(详细教程)
1.简介 前面几篇基础系列文章,足够你迈进了Selenium门槛,再不济你也至少知道如何写你第一个基于Java的Selenium自动化测试脚本.接下来宏哥介绍Selenium技巧篇,主要是介绍一些常用 ...
- 《手把手教你》系列技巧篇(十四)-java+ selenium自动化测试-元素定位大法之By xpath上卷(详细教程)
1.简介 按宏哥计划,本文继续介绍WebDriver关于元素定位大法,这篇介绍定位倒数二个方法:By xpath.xpath 的定位方法, 非常强大. 使用这种方法几乎可以定位到页面上的任意元素. ...
- 《手把手教你》系列技巧篇(十五)-java+ selenium自动化测试-元素定位大法之By xpath中卷(详细教程)
1.简介 按宏哥计划,本文继续介绍WebDriver关于元素定位大法,这篇介绍定位倒数二个方法:By xpath.xpath 的定位方法, 非常强大. 使用这种方法几乎可以定位到页面上的任意元素. ...
- 《手把手教你》系列技巧篇(十六)-java+ selenium自动化测试-元素定位大法之By xpath下卷(详细教程)
1.简介 按宏哥计划,本文继续介绍WebDriver关于元素定位大法,这篇介绍定位倒数二个方法:By xpath.xpath 的定位方法, 非常强大. 使用这种方法几乎可以定位到页面上的任意元素. ...
随机推荐
- C# 最原始的tree 递归使用
; i < dr.Rows.Count; i++) { ) { n ...
- 【缓存】.net中Cache管理操作
隐藏行号 复制代码 ? 这是一段程序代码. using System; using System.Web; using System.Web.Caching; using System.Collect ...
- DELL服务器SAS 5 I_R 完全配置手册
http://wenku.baidu.com/view/f258a36eb84ae45c3b358c55.html?re=view
- Solaris从安装光盘安装软件
系统安装完成后默认没有安装GCC 挂载系统盘后,所安装的软件就在/cdrom/sol-10-811-x86/Solaris_10/Product文件夹下可以查看下关于GCC的软件包 #ls -l | ...
- c++强制类型转换(static_cast,const_cast,dynamic_cast,reinterpret_cast)
static_cast <typeid>(exdlvssion) static_cast 很像 C 语言中的旧式类型转换.它能进行基础类型之间的转换,也能将带有可被单参调用的构造函数或用户 ...
- linux下vi的复制,黏贴,删除,撤销,跳转等命令
前言 在嵌入式linux开发中,进行需要修改一下配置文件之类的,必须使用vi,因此,熟悉 vi 的一些基本操作,有助于提高工作效率. 一,模式vi编辑器有3种模式:命令模式.输入模式.末行模式 ...
- iOS自动布局一
Align: Pin:
- 根据Ip获取城市帮助类
思路构建 1.先通过本地的测IP地址库进行匹配 2.如果本地IP地址库存在此IP的城市信息,就直接返回,调用速度也快 3.如果本地没有对应的IP城市信息,必须通过调用网络的IP查询的API了,这里我使 ...
- VS2010 自动关闭的问题解决方法
分为如下几个解决方法: 没有安装VS2010的SP1,安装后,问题解决了 自定义设置,出现了不正确的情况,执行 devenv.exe /resetsettings 可以排除故障 使用 devenv.e ...
- PHP上传图片如何防止图片木马?
segmentfault回答: http://segmentfault.com/q/1010000000507750 一. 其实识别图片木马是很困难的,可以在一张正常的图片里加入一句话木马. 但是只要 ...