在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
一、基本概念介绍1,固有内容尺寸(intrinsic content size)
2,约束优先级
3,伸缩优先级
(1)对于像 UILabel、UIButton、UIImage 等具有固有内容尺寸的控件,我们可以只为其指定位置,它们会自动根据 intrinsic
content size 显示相应的大小。
(2)通常情况下,这种不指定尺寸的布局不会出现问题。但在某些情况下,比如两个 UILabel 布局互相影响的话,就会造成组件间的 Intrinsic 冲突。(下面会通过样例演示)
(3)要解决冲突,就要用到 UIView 自带的模糊约束:content Hugging 和 content Compression
Resistance 了。我们需要做的就是设置这两个约束的优先级,它们具体功能如下:
二、Content Hugging Priority / Content Compression Resistance Priority 使用1,Intrinsic 冲突样例
(1)假设我们需要实现如下列表,左侧显示文章标题,右侧显示日期。
(2)AutoLayout 布局的话,首先在单元格内部拖如两个 UILabel,并设置好相关样式属性。
(3)然后我们对标题 Label 设置上下左右 4 个约束。
(4)而对于日期 Label 则设置上下右 3 个约束。
(5)这两个标签我们都没设置尺寸约束,想让它们根据内容自己设置大小。但上面的约束添加完会发现系统提示有约束冲突错误:
(6)而程序运行后的效果如下,与我们想要的效果不一样。
2,问题原因由于默认情况下,两个 UILabel 的抗拉伸、抗压缩优先级都是一样的。当单元格的空间不足以完全显示出标题和日期内容时,系统就不知道该压缩哪个 Label 的宽度。又或者空间充裕时,系统不知道该拉伸哪个 Label 的宽度。
3,解决办法(1)我们希望在空间不足的情况下,优先压缩标题 Label 的宽度,那么可以将其抗压缩优先级调低,改成:749。
(2)而在空间充足的情况下,同样优先拉伸标题 Label 的宽度,那么同样将其抗拉伸优先级调低,改成:250。
(3)再次运行程序,便发现列表内容显示正常了。
|
请发表评论