今天来说一说UILabel的约束设置问题

首先主要介绍:Priority(控件约束的优先级)、Content Hugging Priority(控件抗拉伸优先级)、Content Compression Resistance Priority(控件抗压缩优先级),好的,开始一个个介绍。

1.Priority控件中每一个约束都有优先级,在xib和storyboard中很容易看到,如图:

在这里可以设置约束的优先级,优先级的取值范围是1~1000,控件的约束会有限满足优先级高的,控件的约束默认都是1000。

2.Content Hugging Priority(控件抗拉伸优先级) 优先级越高越不容易被拉伸,默认是250。

3.Content Compression Resistance Priority(控件抗压缩优先级) 和拉伸一样,优先级越高的越不容易和压缩,默认是750。

上面只是简单介绍一下,下面进入演练中。

在view中添加一个label,设置约束左:150,右150,垂直居中,最好给label设置背景颜色,这样比较容易看清label的长度。

运行之后,显示为

为什么会显示成这个样子,我们的label的居然被压缩了,这并不是我们想要的结果,原因请接着往下看。

Content Compression Resistance Priority(抗压缩的优先级)是750,而我们控件约束默认的是1000,此时肯定会先满足控件约束的,所以label被压缩了。要体现抗压缩性也就是说label不被压缩这时要将label的左或者右约束优先级设置小于750。此时就会先满足抗压缩,控件的约束就先放一边了。我是将label的右约束优先级改成650了,显示结果为:

好了,肯定会有小伙伴骂我,我靠,这什么鬼,不要惊讶,这是正常的,因为我设置的约束有点大了,并且文字没换行,小伙伴们可以自己调试一下,多动手才能印象深刻。

接下来演示被拉伸的效果。

此时我们设置label的左右距屏幕边约束为60,优先级设置默认的1000,显示结果为:

是的,你会发现label被拉伸了,这是因为label的抗拉伸优先级是250,而label约束的优先级是1000,这是系统肯定会优先考虑label的约束,所以label被拉伸了。当我们设置label右约束为240时,当然也可以设置左侧,注意:可以同时设置左右约束的优先级,但是如果你设置的都小于250时,不能让label的左右的优先级相等,这是为什么呢?因为既然约束的优先级小于抗拉伸的优先级label肯定不会被拉伸,这时label的左右约束优先级还一样,你让系统执行那一个约束?如果都执行那就是label被拉伸,如果都不执行label还会显示吗?所以这样设置会当场报错,看来系统也是很明智的。好了,正确设置完之后结果会显示这样:

这样label没有被拉伸,显示了它的固有尺寸。

把自己的理解写出了,有不对的地方请小伙伴们指正。

UILabel的抗压缩、抗拉伸、以及控件的约束简述的更多相关文章

  1. Masonry 抗压缩 抗拉伸

    约束优先级: 在Autolayout中每个约束都有一个优先级, 优先级的范围是1 ~ 1000.创建一个约束,默认的优先级是最高的1000 Content Hugging Priority: 该优先级 ...

  2. iOS Masonry 抗压缩 抗拉伸

    约束优先级: 在Autolayout中每个约束都有一个优先级, 优先级的范围是1 ~ 1000.创建一个约束,默认的优先级是最高的1000 Content Hugging Priority: 该优先级 ...

  3. [转 载] android 谷歌 新控件(约束控件 )ConstraintLayout 扁平化布局

    序 在Google IO大会中不仅仅带来了Android Studio 2.2预览版,同时带给我们一个依赖约束的库. 简单来说,她是相对布局的升级版本,但是区别与相对布局更加强调约束.何为约束,即控件 ...

  4. iOS开发小技巧--UIScrollView内部子控件添加约束的注意点

    注意:用UIScrollView时布局子控件的时候,不要相对于UIScrollView来添加约束,这样做不是设置子控件的位置,反而是设置了UIScrollView的contentSize 子控件的尺寸 ...

  5. 5、利用控件TVCLZip和TIdFTP压缩文件并上传到FTP的线程单元pas 改进版

    用到临界区 保护写日志的函数: 递归函数 删除目录下的所有文件: 循环创建或判断FTP的目录: 可改进的地方:循环压缩深层次目录的所以文件: 实现断点续传,或断点下载: {************** ...

  6. Android开发之基本控件和详解四种布局方式

    Android中的控件的使用方式和iOS中控件的使用方式基本相同,都是事件驱动.给控件添加事件也有接口回调和委托代理的方式.今天这篇博客就总结一下Android中常用的基本控件以及布局方式.说到布局方 ...

  7. Android-基本控件和详解四种布局方式

    转自:https://www.cnblogs.com/ludashi/p/4883915.html 一.常用基本控件 1.TextView 看到Android中的TextView, 我不禁的想到了iO ...

  8. Qt 控件随窗口缩放

    在Qt的界面设计中,我们有时候希望窗口在最大化的时候,上面的控件也跟着缩放,那么我们就需要调整控件的SizePolicy属性,关于这个属性的讲解请参见我之前的博客Qt SizePolicy 属性,由于 ...

  9. [iOS微博项目 - 1.8] - 各种尺寸图片加载 & 控件不显示研究

    A. 图片的加载:  [UIImage imageNamed:@"home"];  加载png图片    一.非retina屏幕  1.3.5 inch(320 x 480)  * ...

随机推荐

  1. gre tunnel

    http://searchenterprisewan.techtarget.com/tip/GRE-tunnel-vs-IPsec-tunnel-What-is-the-difference Enca ...

  2. fp oo

    http://blog.enfranchisedmind.com/2009/05/scala-not-functional/

  3. cordova sqlite

    jar包在这里下载 https://github.com/litehelpers/Cordova-sqlite-storage 把SQLitePlugin 复制到自己工程目录 org.pgsqlite ...

  4. JS模拟窗口

    摘自于网络:http://www.cnblogs.com/joinger/articles/1297228.html <!DOCTYPE html PUBLIC "-//W3C//DT ...

  5. 关于web.xml的格式

    先是filter  再是<filter-mapping> 然后<servlet> 再是<servlet-mapping> 这是一种规范基于j2ee 在开发的过程中一 ...

  6. 查找mysql数据库中所有包含特定名字的字段所在的表

    整个数据库查找 placement 字段: select * from INFORMATION_SCHEMA.columns where COLUMN_NAME Like '%placement%'; ...

  7. PID控制学习笔记(一)

    比例控制往往会存在稳态误差(该结论适用于0型对象) 由比例度的定义和意义,比例增益Kc越大,即直线的斜率越大,则,越快达到平衡,稳态误差越小,因此在保证系统相对稳定性一定的条件下,总是希望比例增益越大 ...

  8. Webdriver中实现区域截图的方式以及如何截取frame中的图片

    import java.awt.Rectangle;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOE ...

  9. margin

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  10. Lucene.NET中Field.Index 和 Field.Store的几种属性的用法

    转载自 http://blog.csdn.net/yja886/article/details/6612069 lucene在doc.add(new Field("content" ...