AutoLayout的核心思想:

Auto Layout 的本质是依靠 某几项约束条件 来达到对某一个元素的确定性定位。我们虽然可以在某个地方只使用一个约束,以达到一个小小的目的,例如防止内容遮盖、防止边界溢出等。但最佳实践证明,如果把页面上每一个元素的位置都用 Auto Layout 进行 “严格约束” 的话,那么 Auto Layout 可以帮我们省去非常多的计算 frame 的代码。

简单来说,严格约束就是对某一个元素的确定性定位,让它在任一屏幕尺寸下都有着唯一确定的位置。这里的确定性定位不是定死的位置,而是对一个元素 完整的约束条件,即在特定屏幕下,这个视图元素的展现具有唯一确定性。

AutoLayout的类型:

这个大致分两类:在xcode7,xib的下面有四个选项,其中中间两个选项就是这两类的集中选择:

1.对齐选项       Edge:操作的元素主要针对的是x,y,center,baseline)

a.相对于父元素        Top Edges,Bottom Edges,LeadingEdges,TrailingEdges,Center,Baseline

b.相对于相邻元素    Top Edges,Bottom Edges,Leading Edges,TrailingEdges,Center,Baseline

2.边间距选项    Space:(操作的元素主要针对的是Δx,Δy,width,height)

a.相对于父元素        Top Space ,Bottom Space,Leading Space,Trailing Space,Widths,Heights,Ratio

b.相对于相邻元素    Top Space ,Bottom Space,Leading Space,Trailing Space, Widths,Heights,Ratio

3.内容适配选项

a.Compression Resistance

b.Content Hugging

c.优先级

简单的来说Compression Resistance 设置view有多大意愿(优先级),愿意压缩里面的内容。Content Hugging设置view 有多大愿意(优先级),愿意显示里面内容之外的部分。

stackoverflow上面有一个很清晰的通过UIButton解释的[例子]:

Quick summary of the concepts:

  • Hugging => content does not want to grow
  • Compression Resistance => content does not want to shrink

and an example:

Say you've got button like this:

[       Click Me      ]

and you've pinned the edges to a larger superview with priority 500. //superview priority 500是以下使用的前提.

Then, if Hugging priority > 500 it'll look like this:

[Click Me]

If Hugging priority < 500 it'll look like this:

[       Click Me      ]

If superview now shrinks then, if the Compression Resistance priority > 500, it'll look like this

[Click Me]

Else if Compression Resistance priority < 500, it could look like this:

[Cli..]

If it doesn't work like this then you've probably got some other constraints going on that are messing up your good work!

E.g. you could have it pinned to the superview with priority 1000. Or you could have a width priority. If so, this can be helpful:

Editor > Size to Fit Content

AutoLayout的视图显示的阶段:

使用AutoLayout之后,把view显示到屏幕上面大体分成3步。

  • Update constraints
  • Layout views
  • Display

一般来说layoutSubviews负责布局,比如调整View之间的距离,大小,drawRect负责绘制,比如使用什么颜色。而AutoLayout则是在layout之前增加了一个设定约束的过程,也就是上面提到了update constraints

Autolayout的一点理解相关推荐

  1. 谈谈对APC的一点理解

    谈谈对APC的一点理解 异步过程调用(APCs) 是NT异步处理体系结构中的一个基础部分,理解了它,对于了解NT怎样操作和执行几个核心的系统操作很有帮助. 1) APCs允许用户程序和系统元件在一个进 ...

  2. python 3列表推导式的的一点理解!

    python 3列表推导式的的一点理解! Python的列表推导式对于新手来说一般都难以理解,简单看个例子: [x * x for x in range(1,100)] 上面是一个很简单的列表推导式, ...

  3. TSYS2.0对动态碎片的一点理解

    最近好多人对tsys很感兴趣,其实大家不知道的是tsys的asp版本早就已经停止开发了,为了不想让如此优秀的东西被埋没所以我在tsys的asp版 本的基础上使用PHP重新开发了一个功能更强的cms,名 ...

  4. 对事件循环的一点理解

    最近工作需要学习了解webworker-threads以应对Javascript多线程处理CPU密集型的可能性:参考文档JavaScript多线程之二 Node.js中的Web Worker; 以下是 ...

  5. Hyperledger Fabric 网络环境的一点理解

    Hyperledger Fabric 开发链码,一般都是测试网络开发,然后部署到生产网络. 下面介绍测试网络.生产网络的一点理解. 1 测试网络 使用cryptogen等工具建立测试网络,开发环境使用 ...

  6. Tecplot中用excel表格绘制xy图的一点理解

    原文地址:Tecplot中用excel表格绘制xy图的一点理解作者:又见谷雨 在画图的时候遇到一些问题,比如想用excel中的数据画xy图,那么应该怎样加载这些数据呢.在网上查找了下,也没有详细的说法 ...

  7. 2.深入一点理解C源程序的编译过程

    2.深入一点理解C源程序的编译过程 本文章的大多数灵感及知识来源于南京大学的计算机系统基础教材,如果希望更加深入地对相关知识做进一步了解,可以移步上述相关资源.在网上可以轻易获得上述资源,mooc也有 ...

  8. negroni包和mux包的一点理解

    codegangsta/negroni包和gorilla/mux包的一点理解 Negroni是一个http.Handle,因为他实现了 func (n *Negroni) ServeHTTP(rw h ...

  9. 对PCIE设备访问及其配置空间的一点理解

    讲讲对PCIE总线协议的一点理解吧.感觉每一年又会多一点理解,但不懂得地方仍很多. PCI总线是拓扑结构,PCI总线从0开始,不超过256(但一般不会一层一层挂太多).Device不超过32,Func ...

最新文章

  1. 售价1万7的华为Mate X很贵吗?
  2. matlab识别不出linux链接,在Ubuntu上,从matlab调用外部脚本失败_linux_开发99编程知识库...
  3. 把 SOAP 服务转化为 REST 服务(REST Service 的最佳实践,第 3 部分)
  4. 【Android 高性能音频】OboeTest 音频性能测试应用 ( 应用简介 | 测试内容 | 输出测试 | Oboe 缓冲区 与 工作负载修改 | 测试案例 )
  5. 33条C#、.Net经典面试题目及答案
  6. Firefox无法启动,提示Profile is yet in use by another Firefox
  7. 面试问题:MyBatis和Hibernate的区别
  8. python3.7模块内容_python3.7 time模块
  9. h5调微信支付 unkonw url_h5移动端调用支付宝、微信支付的实现
  10. CentOS 常用命令及快捷键整理[转载]
  11. 异步任务利器Celery(一)介绍
  12. ES6 关于Set对象
  13. 新库上线 | CnOpenData中国工业企业绿色专利及引用被引用数据简介
  14. [算法学习no5]kmp
  15. PowerQuery 相对路径解决方案
  16. AutoGPT保姆级安装使用教程
  17. 计算机化工应用答案,计算机化工应用习题与解答.pdf
  18. Pygame 教程(2):重要的概念及对象
  19. SQL语句执行顺序详解
  20. 程序员新手上路第一步

热门文章

  1. 用累积分布函数(CDF)计算期望
  2. 动态网站CDN是如何加速的?
  3. STM32CUBEMX驱动lcd1602,使用的是stm32f103c8t6芯片
  4. Ngrok的注册使用
  5. 网络安全工程师做什么?
  6. ASO优化在大数据时代应该怎么操作,aso优化如何操作
  7. js之splice 和 slice
  8. 笔记-Java基础语法-二进制
  9. 唱歌如何更好听? KTV调音师帮你忙
  10. 叶胜超:V SYSTEMS(VSYS)--人人可发币的公链项目!