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. 【HDOJ】2267 How Many People Can Survive

    BFS. #include <iostream> #include <cstdio> #include <cstring> #include <queue&g ...

  2. C# Hashtable中存入数组、List

    哈希表中存入数组示例代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; ...

  3. bzoj2096

    本来也不打算写这道题的解题报告的,因为比较水直接维护两个单调队列(最大值,最小值)随便弄弄就行了但是我开始疯狂不知道为什么的RE,然后实在没办法找root要了数据测了之后……王苍,根本就没有错啊……我 ...

  4. datetime和timer的使用(小小幻灯片)

    一:展示图片 每秒换一次图片,一共六十张图片,00-59 二:代码 a,设计代码 namespace timePicture { partial class Form1 { /// <summa ...

  5. WCF—Binding

    原文地址:http://www.cnblogs.com/jams742003/archive/2010/01/13/1646379.html Binding描述了哪些层面的信息 一个Binding包含 ...

  6. poj2586

    千年虫病毒 一个财务公司受到电脑病毒攻击所以丢失了一部分年终财务的数据. 他们所有记得的东西都在Inc里面储存着,在1999年之前公司要每个月都贴出盈利和亏损情况.亏损的是d,由于收到了攻击,他们不记 ...

  7. [转]机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)

    机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 转自http://www.cnblogs.com/tornadomeet/p/3395593.html 前言: 找工作时(I ...

  8. HashTable和HashMap的区别

    1.HashTable线程安全,同步,效率相对低下. HashMap线程不安全,非同步,效率相对高 2.父类:HashTable的父类是Dictionary HashMap是AbstractMap 3 ...

  9. php开启curl和openssl

    php开启curl和openssl 开启php curl函数库的步骤 1).去掉windows/php.ini 文件里;extension=php_curl.dll前面的; /*用 echo phpi ...

  10. IE JavaScript字符串转换成Date后出现NaN错误

    参考的博文:http://blog.csdn.net/zhu7478848/article/details/53388582 在IE浏览器下, JavaScript字符串转换成Date后会出现NaN错 ...