纯代码添加约束条件(Auto Layout)
Auto Layout 是一种基于约束的、描述性的布局系统。也就是使用约束条件来描述布局,View的Frame会根据这些描述来进行计算。
- (void)addAllViews
{
// 在延展中先声明leftButton和rightButton两个属性
// 添加_leftButton
self.leftButton = [UIButton buttonWithType:UIButtonTypeSystem];
[_leftButton setTitle:@"Left" forState:UIControlStateNormal];
_leftButton.layer.borderColor = [UIColor blackColor].CGColor;
_leftButton.layer.borderWidth = 2.0f;
[self.view addSubview:_leftButton];
// 添加_rightButton
self.rightButton = [UIButton buttonWithType:UIButtonTypeSystem];
[_rightButton setTitle:@"Right" forState:UIControlStateNormal];
_rightButton.layer.borderColor = [UIColor blackColor].CGColor;
_rightButton.layer.borderWidth = 2.0f;
[self.view addSubview:_rightButton];
// 关闭自动调整
_leftButton.translatesAutoresizingMaskIntoConstraints = NO;
_rightButton.translatesAutoresizingMaskIntoConstraints = NO;
// 1. 创建一个存放约束条件的可变数组
NSMutableArray *tempConstraintsMutableArray = [NSMutableArray array];
// 2. 在水平方向上:设置_leftButton距离父视图左侧距离为50,_leftButton的宽度为100,_rightButton距离_leftButton的横向距离为50,_rightButton的宽度设置为100
// 需要理解的参数:@"H:|-50-[_leftButton(==100)]-100-[_rightButton(==100)]"
[tempConstraintsMutableArray addObjectsFromArray:[NSLayoutConstraintconstraintsWithVisualFormat:@"H:|-50-[_leftButton(==100)]-100-[_rightButton(==100)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_leftButton, _rightButton)]];
// 和上面的设置类似,只是在竖直方向上
// 在竖直方向上:设置_leftButton距离父视图顶部100,_leftButton高度为100,_rightButton和_leftButton之间的距离为100,_rightButton的高度为100
// 需要理解的参数:@"V:|-100-[_leftButton(==100)]-50-[_rightButton(==100)]"
// [tempConstraintsMutableArray addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-100-[_leftButton(==100)]-50-[_rightButton(==100)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_leftButton, _rightButton)]];
// 3. 在垂直方向上:给_leftButton设置距离父视图顶部50,_leftButton高度为100
// 需要理解的参数:@"H:|-100-[_leftButton(==100)]"
[tempConstraintsMutableArray addObjectsFromArray:[NSLayoutConstraintconstraintsWithVisualFormat:@"V:|-100-[_leftButton(==100)]" options:0metrics:nil views:NSDictionaryOfVariableBindings(_leftButton)]];
// 在垂直方向上:给_rightButton设置距离父视图顶部50,_rightButton高度为100
[tempConstraintsMutableArray addObjectsFromArray:[NSLayoutConstraintconstraintsWithVisualFormat:@"V:|-100-[_rightButton(==_leftButton)]"options:0 metrics:nil views:NSDictionaryOfVariableBindings(_rightButton,_leftButton)]];
// 和上面的设置类似,只是在水平方向上的
// 在水平方向上:设置_leftButton距离父视图左侧为50,_leftButton的宽度为50
// [tempConstraintsMutableArray addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-100-[_leftButton(==50)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_leftButton)]];
// 在水平方向上:设置_rightButton距离父视图左侧为50,_rightButton的宽度为50
// [tempConstraintsMutableArray addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-100-[_rightButton(==_leftButton)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_rightButton, _leftButton)]];
// 4. 给视图添加约束
[self.view addConstraints:tempConstraintsMutableArray];
**
* 解释
* H: Horizontal, 水平的,水平方向
* V: Vertical, 垂直的,竖直方向
*
}
纯代码添加约束条件(Auto Layout)的更多相关文章
- IOS 纯代码添加 Button Image Label 添加到自定义View中
@interface ViewController () /**获取.plist数据*/ @property (nonatomic,strong) NSArray *apps; @end @imple ...
- iOS-原生纯代码约束总结(二)之 AutoLayout
一,概述 AutoLayout相比AutoResizing更加实用,是可以完全替代AutoResizing的一种自动布局方式.而在使用AutoLayout前,我们必须理解一个属性,那就是transla ...
- iOS 开发实践之 Auto Layout
原:http://xuexuefeng.com/autolayout/?utm_source=tuicool 本文是博主 iOS 开发实践系列中的一篇,主要讲述 iOS 中 Auto Layout(自 ...
- iOS开发之Auto Layout入门(转)
随着iPhone6与iOS8的临近,适配的问题讲更加复杂,最近学习了一下Auto Layout的使用,与大家分享. 什么是Auto Layout? Auto Layout是iOS6发布后引入的一个全新 ...
- 从 Auto Layout 的布局算法谈性能
这是使用 ASDK 性能调优系列的第二篇文章,前一篇文章中讲到了如何提升 iOS 应用的渲染性能,你可以点击 这里 了解这部分的内容. http://t.cn/Rc4KbUC 在上一篇文章中,我们提到 ...
- iOS------手势操作(nib文件、纯代码)
总共有六种手势识别:轻击手势(TapGestureRecognizer),轻扫手势 (SwipeGestureRecognizer), 长按手势(LongPressGestureRecognizer) ...
- 【转】iOS6中的Auto Layout:通过代码添加约束
最近做的项目用到了Auto Layout,于是经过了一番大量的google,这是我看到的讲用代码创建约束最清晰的一篇教程,于是想跟更多的人分享一下.原文也比较简单,可以直接过去看,如果我翻译的 ...
- iOS 8 Auto Layout界面自动布局系列2-使用Xcode的Interface Builder添加布局约束
http://blog.csdn.net/pucker/article/details/41843511 上一篇文章<iOS 8界面自动布局系列-1>简要介绍了iOS界面布局方式的前世今生 ...
- 手写代码自动实现自动布局,即Auto Layout的使用
手写代码自动实现自动布局,即Auto Layout的使用,有需要的朋友可以参考下. 这里要注意几点: 对子视图的约束,若是基于父视图,要通过父视图去添加约束. 对子视图进行自动布局调整,首先对UIVi ...
随机推荐
- runtime详解2
Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理.这种动态语言的优势在于:我们写代码时更具灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一 ...
- android最快的模拟器
https://www.genymotion.com/ genymotion Genymotion是一套完整的工具,它提供了Android虚拟环境.它简直就是开发者.测试人员.推销者甚至是游戏玩家的福 ...
- 经验之巧妙的应用Map
后台: @RequestMapping("/cmci/v_divide_check_add.do") public String toDivideCheckAdd(HttpS ...
- 低级错误之Oracle客户端添加数据
本来可以为空的外键,自己非要写一个无意义的值,导致数据保存失败.
- 一些好用的nginx第三方模块
一些好用的nginx第三方模块 转自;http://macken.iteye.com/blog/1963301 1.Development Kit https://github.com/simpl/ ...
- Android studio中出现非法字符时的部分解决方法
我将原来在Eclipse中开发的工程搬到了Android studio上来,在运行,编译程序的过程中出现了错误.提示存在非法字符. 后来发现是由于程序代码中有中文字符的出现,问题就出在对中文支持的UT ...
- Nginx+Keepalived+Tomcat之动静分离的web集群
#vi /etc/nginx/nginx.conf############################################user nginx nginx;worker_process ...
- pomelo 开发环境搭建
开发前提条件: Windows系统,请确保你的Windows系统包括源代码编译工具.Node.js的源代码主要由C++代码和JavaScript代码构成,可是却用gyp工具来做源代码的项目管理,该工 ...
- Yum本地Rpm库设置
http://blog.csdn.net/dc_726/article/details/8497188 1 Yum对光盘的支持 查看/etc/yum.repos.d/CentOS-Media.re ...
- tcp_tw_recycle和tcp_timestamps的文章汇总
临近年关,人会变得浮躁,期间写的代码可谓乱七八糟.不过出来混始终是要还的,这不最近就发现一个PHP脚本时常连不上服务器. 遇到这类问题,我习惯于先用strace命令跟踪了一下看看: shell ...