TableViewCell的高度计算应该是所有开发者都会使用到的东西,之前都是用代码计算的方法来计算这个高度。最近有时间看了几个计算Cell高度的方法。基本上都用到了AutoLayout,这篇首先介绍一下需要了解的三个AutoLayout属性。

一.名词解析

intrinsicContentSize:字面意思就是固有的大小。就是说在没有受到约束影响时本来应该有的大小。
Content Hugging Priority:字面意识是内容压缩优先级。就是说阻止view返回的实际尺寸比intrinsicContentSize大的优先级。
Content Compression Resistance Priority:字面意思就是内容抗压缩优先级。就是说阻止View返回的实际尺寸比intrinsicContentSize小的优先级。
看完名词解析之后肯定是很抽象,很难理解。下面通过具体的代码以及效果,理解一下应该就好接受了。
 

二.具体举例

1.先来看一下intrinsicContentSize

如图:
此时我在页面中添加了一个Button,并且Title为intrinsicContentSize,然后添加了一个距离顶部的约束以及一个距离左边的约束。并Log出Button的intrinsicContentSize属性。此时的content正好充满整个Button。运行效果如下图:

2.下面看一下Content Compression Resistance Priority

我们继续给Button添加一个距离右边的约束,要大一些,为150。如图:
运行效果如下图:
此时Button很明显被压缩了。因为左边距100+右边距150+Button的intrinsicContentSize.width已经超出了屏幕的宽度。这时候就要用约束的优先级来作限制了,显然我们要让Button的Content Compression Resistance Priority抗压缩优先级高于右边距的约束的优先级,这样就可以返回intrinsicContentSize。
此前所有的优先级都是默认的,下面来修改一下。Content Compression Resistance Priority的默认值是750(middle),而我们自己添加的约束的优先级要高于这个是1000(high)。如图:
 

下面我们把右边距约束的优先级改称749运行一下,效果如下图:

Button又回到了原来的大小,因为此时Content Compression Resistance Priority的750大于右边距的优先级749,所以他抗拒了右边距的压缩,保持了Button的大小。

3.下面看一下Content Hugging Priority

我们先把刚刚右边距的优先级恢复成原来的1000。然后将其Constant的值改的小一点为20,如图:

运行如下图:

Button被拉伸了,因为左边距100+右边距20+Button的intrinsicContentSize.width还没有达到屏幕的宽度,左边距和右边距的优先级又高于Button的Content Hugging Priority的优先级,Content Hugging Priority的默认值为250(low)。这次我们改下左边距的优先级使其小于Content Hugging Priority的优先级,改成249。如图:

此时Button恢复了原本的大小。我想Content Hugging Priority这个属性现在翻译成内容抗拉伸优先级也可以。

AutoLayout学习之理解intrinsicContentSize,Content Hugging Priority,Content Compression Resistance Priority的更多相关文章

  1. iOS开发之AutoLayout中的Content Hugging Priority和 Content Compression Resistance Priority解析

    本篇博客的内容也不算太复杂,算是AutoLayout的一些高级的用法.本篇博客我们主要通过一些示例来看一下AutoLayout中的Content Hugging Priority以及Content C ...

  2. 转:AutoLayout中的Content Hugging 和 Content Compression Resistance

    OS6中引入了AutoLayout,极大的方便了UI元素的布局,现在已经过去一年了,并且大部分设备的系统也已经升级到了iOS6,是时候要使用此项技术了. 在AutoLayout的学习中有两个概念官方文 ...

  3. iOS开发 - Content hugging priority & Content compression resistance priority

    1. 什么是Content hugging priority 你可以把它想象成一根放在视图上的橡皮筋. 这根橡皮筋会组织视图超过它本身的固有大小(intrinsic content size). 它存 ...

  4. 在代码中使用Autolayout – intrinsicContentSize和Content Hugging Priority

    我们继续来看在代码中使用Autolayout的话题.先说intrinsicContentSize,也就是控件的内置大小.比如UILabel,UIButton等控件,他们都有自己的内置大小.控件的内置大 ...

  5. iOS: 在代码中使用Autolayout (2) – intrinsicContentSize和Content Hugging Priority【转】

    原文:http://www.mgenware.com/blog/?p=491 接上文:iOS: 在代码中使用Autolayout (1) – 按比例缩放和优先级. 我们继续来看在代码中使用Autola ...

  6. intrinsicContentSize和Content Hugging Priority

    Mgen | 首页 | | 发新文章 | 联系 | 订阅  | 管理 iOS: 在代码中使用Autolayout (2) - intrinsicContentSize和Content Hugging ...

  7. 【log4j】的学习和理解 + 打印所有 SQL

    log4j 1.2 学习和理解 + 打印所有 SQL 一.基本资料 官方文档:http://logging.apache.org/log4j/1.2/manual.html(理解基本概念和其他) lo ...

  8. SQL Server 学习博客分享列表(应用式学习 + 深入理解)

    SQL Server 学习博客分享列表(应用式学习 + 深入理解) 转自:https://blog.csdn.net/tianjing0805/article/details/75047574 SQL ...

  9. JDK学习---深入理解java中的HashMap、HashSet底层实现

    本文参考资料: 1.<大话数据结构> 2.http://www.cnblogs.com/dassmeta/p/5338955.html 3.http://www.cnblogs.com/d ...

随机推荐

  1. cf B Very Beautiful Number

    题意:给你两个数p和x,然后让你找出一个长度为p的数,把它的最后移到最前面之后得到的数是原来数字的x倍,有很多这样的数取最小. 思路:枚举最后一位,然后就可以推出整个的一个数,然后比较得到的数的第一个 ...

  2. 堆和栈的区别【zz】

    一.预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1.栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈.2. ...

  3. iTerm2 + oh my zsh代替mac自带的bash shell

    使用Solarized dark配色方案 需要字体menlo for powerline oh-my-zsh主题使用agnoster,这个主题默认的路径是全路径,当路径很长的时候,就会占很长的空间,可 ...

  4. hdoj 1728 逃离迷宫

    逃离迷宫 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  5. 对Spring的一些理解

    最近在复习一些关于框架的概念性问题,主要是为了最近的面试,怕被问到这些概念性的问题.不过在真正做开发的时候还是要好好理解这些框架的基本原理,以及它们的工作流程.这样,我们才能更好的使用这些框架.下面就 ...

  6. OS开发 touch事件的优先级和事件传递

    界面类的对象一般都是可以接触点击事件的,只不过有的默认接受,有的需要设定属性. userInteractionEnabled 属性设置为YES的时候就可以接受点击事件了 - (void)touches ...

  7. VMware vSphere 服务器虚拟化之二十五 桌面虚拟化之终端服务池

    VMware vSphere 服务器虚拟化之二十五 桌面虚拟化之终端服务池 终端服务池是指由一台或多台微软终端服务器提供服务的桌面源组成的池.终端服务器桌面源可交付多个桌面.它具有以下特征: 1.终端 ...

  8. Win8 移除右键菜单中的SkyDrive Pro选项

    Step 1:进入注册表编辑器 Win + R键调出运行窗口,然后输入regedit,进入注册表编辑器. Step 2:删除下面的键值 HKEY_CLASSES_ROOT\AllFilesystemO ...

  9. 技术型创业者easy遇到的三大问题

    关于创业这事儿.由于经历的事情实在是太多了,所以真是想到哪儿写到哪儿. 这一篇算是<杂记>的番外篇.我今天想说的东西太多了,实在是非常想和很多其它人讨论讨论关于创业的事情. 这样的感觉就像 ...

  10. C primer plus 读书笔记第十二章

    C的强大功能之一在于它允许我们控制程序的细节.C的内存管理系统正是这种控制能力的例子.它通过让我们决定哪些函数知道哪些变量以及一个变量在程序中存在多长时间来实现这些控制. 1.存储类及其说明符 主要的 ...