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. db2数据库中查找数据库表

    模糊查找db2数据库中的数据库表: select tabname,remarks from syscat.tables where TABNAME like  'DM%' select 'DROP T ...

  2. STL容器介绍(转)

    STL的容器可以分为以下几个大类: 一:序列容器, 有vector, list, deque, string. 二 : 关联容器,     有set, multiset, map, mulmap, h ...

  3. C# 绘图对象 流对象 响应对象关系

  4. sed文本处理--文本行扩展与分割

    原文件: 00 abc sdfdsf1 2 45 3 400 xfd xdfssdf3 322 345 234 处理后文件: 00 abc sdfdsf 1 2 400 abc sdfdsf 5 3 ...

  5. 图解linux下top命令的使用

    top命令经常用来监控linux的系统状况,比如cpu.内存的使用,程序员基本都知道这个命令,但比较奇怪的是能用好它的人却很少,例如top监控视图中内存数值的含义就有不少的曲解. 本文通过一个运行中的 ...

  6. 读取App.config自定义标签的值

    一:程序截图 二:具体代码 config配置: <?xml version="1.0" encoding="utf-8" ?> <config ...

  7. 安装robotframework时提示权限受限

    mba下准备装robotframework,python已默认装好,按照如下的教程继续按照robotframework,发现会提示权限受限,如图. 第二步: 安装 robotframework下载地址 ...

  8. 暴力求解——Equivalent Strings

    Submit Status Description Today on a lecture about strings Gerald learned a new definition of string ...

  9. ssh非交互式密码输入

    ssh登陆不能在命令行中指定密码.sshpass的出现,解决了这一问题.sshpass用于非交互SSH的密码验证,一般用在sh脚本中,无须再次输入密码. 它允许你用 -p 参数指定明文密码,然后直接登 ...

  10. B - Frogger

    题目大意: 一个叫做弗雷迪的青蛙坐在湖中间的一块石头上.突然他注意到他的青蛙女神菲奥娜坐在另一块石头上面,于是他计划去看她,但是呢湖里面的水很脏并且充满了游客的防晒霜,所以他想避免游泳而采用跳跃的方式 ...