iOS-内容拥抱和内容压缩抵抗优先级

在处理自动布局时,优先级非常重要。 每个约束都有一个优先级。 它只是一个介于0到1000之间的数字。

根据apple docs: 布局优先级用于向基于约束的布局系统指示哪些约束更为重要,从而在满足系统整体约束时允许系统进行适当的权衡。

只有当两个不同的约束发生冲突时,优先权才真正发挥作用。 该系统将重视具有较高优先级的系统。 因此, 优先级是自动布局世界中的决胜局

内容包含优先级:

设置优先于使视图大于其固有大小的优先级。 将此优先级设置为更大的值表示我们不希望视图的大小超过其内容的大小。

考虑上述情况,其中两个视图水平放置,没有适当的宽度限制。 这将产生冲突。 在这种情况下,我们需要将一个视图的内容包含优先级设置为大于另一个视图的优先级。

考虑这个图像。 将两个标签放到视图上,并且对两个标签的顶部尾部和前部侧都施加了约束。 没有给出这两个标签的宽度,这在这两个标签之间产生了冲突。 在这里,两个标签的水平内容的优先级均等于251。正如我之前提到的,一个视图的优先级约束应高于另一个视图,以打破平局。

让我们将包含绿色标签优先级的水平内容设置为250,让蓝色标签优先级保持不变。 在这种情况下,如前所述,具有较高水平内容优先级的一个视图将不会超出其内容大小。 这意味着绿色标签将增长,蓝色标签将保持其固有内容大小。

同样,如果绿色的值较高,则意味着蓝色标签将超出其固有内容大小。

因此,具有较高优先级的内容,绑定的视图将更紧密地拥抱于内在内容,从而阻止视图超过其内在内容的大小。

内容压缩抗性优先级:

设置视图拒绝使其小于其固有大小的优先级。 设置较高的值意味着我们不希望视图缩小到小于内部内容大小。

内容压缩抗性非常简单。 没有太多的并发症。 优先级越高,表示收缩的阻力越大。

这是一个示例:考虑一个名称很长的按钮:

假设名称为“ 具有较大名称的按钮 ”。 我们添加了一个简单的约束,告诉自动布局尝试将按钮的宽度保持在44点。 Auto Layout会按照提示进行操作,并且折叠我们的按钮,使其完全不可读。

不用担心,我们可以使用抗压缩性来阻止这种情况。 将按钮的水平压缩阻力优先级设置为1000。现在,将宽度约束的优先级更改为0到999之间的任何值。 小于按钮的水平“压缩阻力优先级”。 现在,“自动布局”允许按钮的固有内容大小优先于宽度约束:

而已。 !

请享用!!

如果您喜欢阅读这篇文章,请分享并给予一些鼓掌,以便其他人可以找到它👏👏👏👏👏!!!!

您可以在Medium上关注我以获取新文章。 另外,在LinkedIn上与我联系。

如果您有任何评论,问题或建议,请随时在下面的评论部分中发布它们!

Interesting Posts