iOS学习笔记——AutoLayout的约束
iOS学习笔记——AutoLayout约束
之前在开发iOS app时一直以为苹果的布局是绝对布局,在IB中拖拉控件运行或者直接使用代码去调整控件都会发上一些不尽人意的结果,后来发现iOS在引入了AutoLayout的同时也引入了约束。约束的存在使得iOS的AutoLayout相当于Android中的相对布局。
一个控件在父容器中的渲染出来,有两方面的要素,一个是大小(Size),另一个是位置(Location)。其实每个空间的初始化方法都会那么一个initWithFrame,Frame就包含了这两要素。在约束中,主要也是分了这两大类。在IB中右下角可以添加约束,也可以看到有哪些约束


本人参照于Android中的相对布局来了解这些布局。
iOS中关于位置的约束也比较多,从上图的图标也可以看出有"XXX Edges"是与其他控件对齐顶端、左端等的约束;"Horizontal Centers"那三个是与其他控件中心对齐的约束;"XXX Center in Container"是对于父容器中心对齐的约束;还有另外一个界面中没有图标也没有文字描述的"XXX Space To",其作用是相对其他控件(有可能是同级的控件,也有可能是父容器)的补白,与Margin效果一样。
关于Size大小的约束显然有普通的宽高约束Width和Height;与其他控件同高同宽的Equal Widths/Heights 也有宽高成比例的约束Aspect Ratio。
在每个约束中其实也包含了一个线性变换的关系,
y=kx+b
这个一次函数的通用表达式在初一时已经开始接触,实际上在每个约束里面都包含着这样的一个关系。
双击左图这个界面中的任意一个约束则会跳转到右图界面中


界面中First Item是一次函数中的因变量y,Second Item是一次函数中的自变量x,Contrant是截距b,Multiplier是斜率k。Relation是两者的关系,一般默认是相等(Equal),可以选择其他关系(<=、>=)。因此当我们想让某个控件占了半个屏幕的高度,可以添加Equal Height的约束,同时把Mulitplier值设成0.5。
了解完这些约束的作用后,在实践的时候也走了少的弯路。
添加约束时除了可以用上述两个界面去添加外,其实像 "XXX Edges" 和"Equal XXX"这样的要与其他控件参与的约束可以通过在IB中按着"Ctrl"键拉线的形式与其他关联上。假如在IB界面设计部分难以选中某个视图,那可以在左端的控件树中进行,能达到相同的效果


在添加约束之前个人认为在IB中把控件的位置和大小先设置好,然后在添加之后效果会直观便捷,不需要反复去调整约束的值。
参考文章
http://www.devtalking.com/articles/adaptive-layout-for-iphone6-1/
iOS学习笔记——AutoLayout的约束的更多相关文章
- iOS学习笔记-地图MapKit入门
代码地址如下:http://www.demodashi.com/demo/11682.html 这篇文章还是翻译自raywenderlich,用Objective-C改写了代码.没有逐字翻译,如有错漏 ...
- iOS学习笔记16-数据库SQLite
一.数据库 在项目开发中,通常都需要对数据进行离线缓存的处理,如新闻数据的离线缓存等.离线缓存一般都是把数据保存到项目的沙盒中.有以下几种方式: 归档:NSKeyedArchiver 偏好设置:NSU ...
- IOS学习笔记25—HTTP操作之ASIHTTPRequest
IOS学习笔记25—HTTP操作之ASIHTTPRequest 分类: iOS2012-08-12 10:04 7734人阅读 评论(3) 收藏 举报 iosios5网络wrapper框架新浪微博 A ...
- IOS学习笔记之关键词@dynamic
IOS学习笔记之关键词@dynamic @dynamic这个关键词,通常是用不到的. 它与@synthesize的区别在于: 使用@synthesize编译器会确实的产生getter和setter方法 ...
- iOS学习笔记-精华整理
iOS学习笔记总结整理 一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始 ...
- iOS学习笔记10-UIView动画
上次学习了iOS学习笔记09-核心动画CoreAnimation,这次继续学习动画,上次使用的CoreAnimation很多人感觉使用起来很繁琐,有没有更加方便的动画效果实现呢?答案是有的,那就是UI ...
- iOS学习笔记总结整理
来源:http://mobile.51cto.com/iphone-386851_all.htm 学习IOS开发这对于一个初学者来说,是一件非常挠头的事情.其实学习IOS开发无外乎平时的积累与总结.下 ...
- iOS学习笔记之Category
iOS学习笔记之Category 写在前面 Category是类别(也称为类目或范畴),使用Category,程序员可以为任何已有的类添加方法.使用类别可以对框架提供的类(无法获取源码,不能直接修改) ...
- iOS学习笔记之ARC内存管理
iOS学习笔记之ARC内存管理 写在前面 ARC(Automatic Reference Counting),自动引用计数,是iOS中采用的一种内存管理方式. 指针变量与对象所有权 指针变量暗含了对其 ...
随机推荐
- 前端编码规范之CSS
"字是门面书是屋",我们不会去手写代码,但是敲出来的代码要好看.有条理,这还必须得有一点约束~ 团队开发中,每个人的编码风格都不尽相同,有时候可能存在很大的差异,为了便于压缩组件对 ...
- 完成AngularJS with MVC 5, Web API 2项目
经过接近两个月的日夜奋战,完成AngularJS with MVC 5, Web API 2的项目,这也是进入公司以后最大的一个项目,从项目需求.用户Prototype/Demo,招人,开发完成,可谓 ...
- sqlalchemy(一)基本操作
sqlalchemy(一)基本操作 sqlalchemy采用简单的Python语言,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型. 安装 需要安装MySQLdb pip install ...
- Can't use Subversion command line client: svn Probably the path to Subversion executable is wrong. Fix it.
1.最近使用SVN工具时,Checkout出项目到本地后后,然后将其导入到Intellij idea中开发,在提交svn代码的时候,出现这样的错误:Can't use Subversion comma ...
- Utility3:Understand Dashboard Report
To see data in the SQL Server Utility dashboard, select the top node in the Utility Explorer tree - ...
- HTML5系列:HTML5绘图
1. canvas元素基础 canvas元素是HTML5中新增的一个重要元素,专门用来绘制图形. 在页面中使用canvas元素绘制图形需要经过的三个步骤: 步骤一 使用canvas元素创建一个画布区 ...
- 【WP 8.1开发】How to 图像处理
在今天的吹牛节目开始之前,先交代一件事: 关于玩WP 8.1开发所使用的VS版本问题.对版本的要求是2013的Update2,这是最低要求,只要是这个版本或以上都可以,而update3,update4 ...
- java静态代理与动态代理
原文链接:http://www.orlion.ga/207/ 一.代理模式 代理模式是经常用到的设计模式,代理模式是给指定对象提供代理对象.由代理对象来控制具体对象的引用. 代理模式涉及到的角色: 抽 ...
- 深入理解闭包系列第三篇——IIFE
× 目录 [1]实现 [2]用途 前面的话 严格来讲,IIFE并不是闭包,因为它并不满足函数成为闭包的三个条件.但一般地,人们认为IIFE就是闭包,毕竟闭包有多个定义.本文将详细介绍IIFE的实现和用 ...
- C# Excel 为图表添加模拟运算表
Excel中的图表能够将数据可视化,方便我们比较分析数据.但也有一定的局限,例如:不能够直接从图表中读出原来数据的准确值.Excel提供的解决方案是,在图表下方添加一个模拟运算表,即在坐标轴下方添加包 ...