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的约束的更多相关文章

  1. iOS学习笔记-地图MapKit入门

    代码地址如下:http://www.demodashi.com/demo/11682.html 这篇文章还是翻译自raywenderlich,用Objective-C改写了代码.没有逐字翻译,如有错漏 ...

  2. iOS学习笔记16-数据库SQLite

    一.数据库 在项目开发中,通常都需要对数据进行离线缓存的处理,如新闻数据的离线缓存等.离线缓存一般都是把数据保存到项目的沙盒中.有以下几种方式: 归档:NSKeyedArchiver 偏好设置:NSU ...

  3. IOS学习笔记25—HTTP操作之ASIHTTPRequest

    IOS学习笔记25—HTTP操作之ASIHTTPRequest 分类: iOS2012-08-12 10:04 7734人阅读 评论(3) 收藏 举报 iosios5网络wrapper框架新浪微博 A ...

  4. IOS学习笔记之关键词@dynamic

    IOS学习笔记之关键词@dynamic @dynamic这个关键词,通常是用不到的. 它与@synthesize的区别在于: 使用@synthesize编译器会确实的产生getter和setter方法 ...

  5. iOS学习笔记-精华整理

    iOS学习笔记总结整理 一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始 ...

  6. iOS学习笔记10-UIView动画

    上次学习了iOS学习笔记09-核心动画CoreAnimation,这次继续学习动画,上次使用的CoreAnimation很多人感觉使用起来很繁琐,有没有更加方便的动画效果实现呢?答案是有的,那就是UI ...

  7. iOS学习笔记总结整理

    来源:http://mobile.51cto.com/iphone-386851_all.htm 学习IOS开发这对于一个初学者来说,是一件非常挠头的事情.其实学习IOS开发无外乎平时的积累与总结.下 ...

  8. iOS学习笔记之Category

    iOS学习笔记之Category 写在前面 Category是类别(也称为类目或范畴),使用Category,程序员可以为任何已有的类添加方法.使用类别可以对框架提供的类(无法获取源码,不能直接修改) ...

  9. iOS学习笔记之ARC内存管理

    iOS学习笔记之ARC内存管理 写在前面 ARC(Automatic Reference Counting),自动引用计数,是iOS中采用的一种内存管理方式. 指针变量与对象所有权 指针变量暗含了对其 ...

随机推荐

  1. linux查看发行版本

    redhat系 cat /etc/redhat-release 其他 lsb_release -a

  2. 使用 MimeKit 和 MailKit 发送邮件

    MimeKit 给.NET 社区带来了一流的 MIME 解析器,它能处理复杂的各种Mime, 性能好.而且开箱即用支持 S/MIME 和 PGP.MimeKit 和 MailKit 支持最新的国际化的 ...

  3. 混搭.NET技术

    新闻 .NET技术+25台服务器怎样支撑世界第54大网站 再度燃起人们对.NET的技术热情.这篇新闻中透露了StackExchange 在技术方面的混搭,这也是我所崇尚的.因此我也在社区里极力推广Mo ...

  4. 在MySQL的InnoDB存储引擎中count(*)函数的优化

    写这篇文章之前已经看过了很多数据库方面的优化内容,大部分都是加索引.使用事务.要什么select什么等等.然而,只是停留在阅读的层面上,很少有实践,因为没有遇到真实的项目,一切都是纸上谈兵.实践是检验 ...

  5. CSS3 Animation制作飘动的浮云和星星效果

    带平行视差效果的星星 先看效果: 如果下方未出现效果也可前往这里查看 http://sandbox.runjs.cn/show/0lz3sl9y 下面我们利用CSS3的animation写出这样的动画 ...

  6. Nodejs初阶之express

    PS: 2014/09/24 更新<Express 4.X 启航指南>,欢迎阅读和评论:)   老规矩,开头部分都是些自娱自乐的随想,想到哪写到哪... 到今天俺已经在俺厂工作俩年零几天了 ...

  7. maven package 知识(转载)

    “打包“这个词听起来比较土,比较正式的说法应该是”构建项目软件包“,具体说就是将项目中的各种文件,比如源代码.编译生成的字节码.配置文件.文档,按照规范的格式生成归档,最常见的当然就是JAR包和WAR ...

  8. CentOS RDO方式快速安装OpenStack

    一.了解RDO RDO是什么? RDO是红帽Red Hat Enterprise Linux OpenStack Platform的社区版,类似RHEL和Fedora,RHEV和oVirt这样的关系. ...

  9. Entity Framework Code First属性映射约定

    Entity Framework Code First与数据表之间的映射方式有两种实现:Data Annotation和Fluent API.本文中采用创建Product类为例来说明tity Fram ...

  10. Bower : ENOGIT git is not installed or not in the PATH

    解决方法一: 添加git到window的环境变量中.设置path路径为C:\Program Files\Git\bin 解决方法二: $ set PATH=%PATH%;C:\Program File ...