前段时间时间总是在纠结这个ios的Autolayout的布局问题。总感觉Apple这样做很麻烦,感觉Autolayout的代码写起来很别扭。半个眼都不想去看那些代码,又臭又长。其实不然,当现在Apple发布的各个产品上市之后,设备的屏幕分辨率也有了很大的变化,iPhone4/4S是3.5寸,iPhone5是4.0寸,ipad2/new ipad/ipad4是9.7寸的,ipad  mini是7.0的,分辨率也各不相同,

要是当我们需要开发一款产品要同时在这些设备上完美运行的时候,如果不用Autolayout,光靠一个View根本就是行不通的,当然,你也可以为一个ViewController做出几个不同的尺寸的View来,但是这样会大大的影响到开发的速度;鄙人以前就那么干过。一个Controller控制2个View分别适配3.5寸和4寸的屏幕。

但是如果用的Autolayout之后,根本就不用那么麻烦。更大化的加快了开发效率。

好了,下来闲话少说,上点实际的东西。

一般运用Autolayout的方法可以直接在IB里面用,用法大概如下:

(1)首先点击当前View,勾选Use Autolayout选项,表示已经启用了AutoLayout

(2)选择某一个Control然后在属性窗口选择如下:

(3)点击齿轮形状的按钮选择Select and Edit

Relation选项分别表示大于/等于/小于

Constant表示当前控件相对于SuperView的x/y的相对距离

Priority表示优先级;关于优先级,Apple官方代码是这么说的:

 

也可以两个控件进行相对定位,以确保控件在各个尺寸的屏幕下面还保持原有的距离值;

上面说的都是用IB直接操作,下面说下关于代码如何操作

- (void)viewDidLoad

{

UIButton *btn1=[UIButton buttonWithType:UIButtonTypeRoundedRect];

[btn1 setTitle:@"Click Me" forState:UIControlStateNormal];

[btn1 setTranslatesAutoresizingMaskIntoConstraints:NO];

//标记是否自动布局

[self.view addSubview:btn1];

UIButton *btn2=[UIButton buttonWithType:UIButtonTypeRoundedRect];

[btn2 setTitle:@"Click Me Please" forState:UIControlStateNormal];

[btn2 setTranslatesAutoresizingMaskIntoConstraints:NO];

//标记是否自动布局

[self.view addSubview:btn2];

NSDictionary *views=NSDictionaryOfVariableBindings(btn1,btn2);

[self.view addConstraints:

[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(==50)-[btn1(100)]"

options:0

metrics:nil

views:views]];

[self.view addConstraints:

[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(==50)-[btn1(30)]"

options:0

metrics:nil

views:views]];

//H=Horizontal,水平方向,同时设定控件宽度

[self.view addConstraints:

[NSLayoutConstraint constraintsWithVisualFormat:@"H:[btn2(==150)]"

options:0

metrics:nil

views:views]];

//V=Vertical,垂直方向,同时设定控件高度

[self.view addConstraints:

[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(>=200)-[btn2(==btn1)]"                             options:0

metrics:nil

views:views] ];

//注意AddConstraints和AddConstraint之间的区别,一个添加的参数是(NSArray *),一个是(NSLayoutConstraint *)

[self.view addConstraint:

[NSLayoutConstraint constraintWithItem:btn2

attribute:NSLayoutAttributeLeft

relatedBy:NSLayoutRelationEqual

toItem:btn1

attribute:NSLayoutAttributeRight

multiplier:1

constant:10]];

[self.view addConstraint:

[NSLayoutConstraint constraintWithItem:btn2

attribute:NSLayoutAttributeTop

//要设定的属性

relatedBy:NSLayoutRelationGreaterThanOrEqual

//大于还是小于相对的View的值

toItem:btn1

//相对于某个View或者控件

attribute:NSLayoutAttributeTop

//指定要设定的关联View的属性

multiplier:1   //因子值

constant:0]];

[super viewDidLoad];

}

上面代码中constraintsWithVisualFormat:参数为NSString型,指定Contsraint的属性,是垂直方向的限定还是水平方向的限定,参数定义一般如下:

V:|-(>=XXX) :表示垂直方向上相对于SuperView大于、等于、小于某个距离

若是要定义水平方向,则将V:改成H:即可

在接着后面-[]中括号里面对当前的View/控件 的高度/宽度进行设定;

options:字典类型的值;这里的值一般在系统定义的一个enum里面选取

metrics:nil;一般为nil ,参数类型为NSDictionary,从外部传入//衡量标准

views:就是上面所加入到NSDictionary中的绑定的View

在这里要注意的是AddConstraints  和 AddConstraint之间的区别,一个添加的参数是NSArray,一个是NSLayoutConstraint

下面看看Apple官方对这几个Constraint的说明:

/*Create constraints explicitly(明确的).  Constraints are of the form "view1.attr1 = view2.attr2 * multiplier + constant"

If your equation(等式) does not have a second view and attribute, use nil and NSLayoutAttributeNotAnAttribute.

*/

+(id)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1 relatedBy:(NSLayoutRelation)relation toItem:(id)view2 attribute:(NSLayoutAttribute)attr2 multiplier:(CGFloat)multiplier constant:(CGFloat)c;

/* Create an array of constraints using an ASCII art-like visual format string. */

+ (NSArray *)constraintsWithVisualFormat:(NSString *)format options:(NSLayoutFormatOptions)opts metrics:(NSDictionary *)metrics views:(NSDictionary *)views;  +

关于IOS的Autolayout特性的理解以及使用相关推荐

  1. iOS1.0到iOS7,iOS七大版本特性回顾

    2013-9-18 15:38:27    出处:搜狐数码    作者:Eskimo    评论(10) | [大 中 小] IT之家(www.ithome.com):iOS1.0到iOS7,iOS七 ...

  2. iOS 11新特性与适配

    iOS 11新特性与适配 1. UIView变化 1.1. 更加方便的RTL边距设置 1.2. 安全区域 2. UIViewController变化 2.1. 废除API 2.1.1. `automa ...

  3. iOS 9应用开发教程之iOS 9新特性

    iOS 9应用开发教程之iOS 9新特性 iOS 9开发概述 iOS 9是目前苹果公司用于苹果手机和苹果平板电脑的最新的操作系统.该操作系统于2015年6月8号(美国时间)被发布.本章将主要讲解iOS ...

  4. IOS之AutoLayout框架的使用

    IOS之AutoLayout框架的使用 #import "UIView+AutoLayout.h" [citySearchResultController.view autoPin ...

  5. 思科(Cisco)IOS 12.3特性分析[ZT]

    cisco的ios 12.3和其子版本不仅包含增加的基本变化和漏洞修复.一起来近距离体验12个最有用的变化,包括网络准入控制(nac),最优边缘路由,动态多点***,ipsec全状态故障恢复等. 可能 ...

  6. 十分钟接入iOS 12新特性——Siri Shortcuts

    前言 Xcode 10已经正式发布,开发者可以接入Siri Shortcuts的iOS 12新特性. WWDC2018的Introduction to Siri Shortcuts Session介绍 ...

  7. 玩转iOS开发:iOS 11 新特性《UIKit新特性的基本认识》

    文章分享至我的个人技术博客: https://cainluo.github.io/15099354591154.html 前两篇, 我们讲了Xcode 9的一些新特性, 可以更加方便我们去写" ...

  8. 教会读者用高级iOS和macOS特性开发应用《Swift编程权威指南》(好书分享更新中)

    Swift编程权威指南(第2版) 内容简介  · · · · · · Big Nerd Ranch是美国一家专业的移动开发技术培训机构,本书是其培训教材.书中系统讲解了在iOS和macOS平台上,使用 ...

  9. [IOS]IOS10新特性以及适配点(转)

    iOS 10 新特性以及适配点 SiriKit 所有第三方应用都可以用Siri,支持音频.视频.消息发送接收.搜索照片.预订行程.管理锻炼等 Proactive Suggestions 系统预先建议 ...

最新文章

  1. SpringBoot-web开发(三): 模板引擎Thymeleaf
  2. 有限状态机设计实例之空调控制器(Verilog HDL语言描述)(仿真与综合)(附用Edraw(亿图)画状态转移图)
  3. 无法打开文件“python310_d.lib”
  4. 使用多线程一定提高效率吗?
  5. 探探自动配对PHP_CentOS7 - 安装Apache HTTP Server和PHP
  6. 1053. 住房空置率 (20)-PAT乙级真题
  7. 拼接sql语句参数绑定
  8. 基于LVDS的高速自同步串行传输系统的研究
  9. 基于大数据的城市租房信息可视化分析系统
  10. 微软推补丁服务器,[图]微软再推稳定性补丁 为即将到来功能更新做准备
  11. springboot接收前端的数组_SpringBoot如何接收数组参数的方法
  12. React中获取地址栏传参
  13. WinEdit如何修改字体大小
  14. 荣耀v40pro和华为nova8pro哪个好?
  15. Markov Chain Monte Carlo
  16. 关于案例式C语言上机指导与习题解答中实验4_15题的解答
  17. Java JSON字符串格式解析,数组取值
  18. Navicat使用方法
  19. BZOJ 3698: XWW的难题|有上下界的网络流之最大流
  20. 几百款经典小游戏,有你的童年吗?

热门文章

  1. opengl SwapBuffers的等待,虚伪的FPS
  2. 什么是高防CDN防护
  3. 机器学习学习笔记 --- 标称型数据和数值型数据
  4. 千里之行,始于足下。python 爬虫 requestes模块(2)
  5. 重构业务系统,我是这样做的
  6. 日语翻译器-日语翻译器软件-日语翻译器排行榜
  7. 运放稳定性连载13:RO何时转变为ZO?(2)
  8. DHCP的原理与配置
  9. 软工大作业·历物语(一)
  10. cs224w(图机器学习)2021冬季课程学习笔记4 Link Analysis: PageRank (Graph as Matrix)