setContentHuggingPriority和setContentCompressionResistancePriority的使用

news/2024/11/18 3:21:15/

需求:

两个label并排显示,文字内容由服务器返回,label宽度以文字内容自适应,label之间间距大于等于10.

  需要考虑以下情况:

  • 当两个label的宽度和 < 屏幕宽度时,各自设置约束,无需处理,都可以完全展示。
  • 当两个label宽度和 > 屏幕宽度时,让左label压缩,优先让右label文字完全显示。

为了实现需求,我们可以使用下面2个api

这2个api是UIView的方法,在使用约束布局时生效。//设置控件的拉伸优先级
//控件的拉伸优先级数值默认是250,数值越大,越不易被拉伸
- (void)setContentHuggingPriority:(UILayoutPriority)priority forAxis:(UILayoutConstraintAxis)axis;//设置控件的抗压缩优先级
//控件的抗压缩优先级数值默认是750,数值越大,越不易被压缩。
- (void)setContentCompressionResistancePriority:(UILayoutPriority)priority forAxis:(UILayoutConstraintAxis)axis;

setContentCompressionResistancePriority(抗压缩),

  • 这个值越低,会在宽度不够的情况下,优先被压缩。
  • 这个值越大,会在宽度不够的情况下,优先完全展示。

常见的视图默认给的值是UILayoutPriorityDefaultHigh = 750。

举例:一个labelA的抗压缩系数为500,labelB为750,那么空间不足的情况下,LabelA会打点显示。

上面的例子中,我们设置左边的label抗压缩为500(小于右侧label即可),即可达到效果。

先看默认情况,设置为750,xib会有报错,并且run效果和xib效果不一致:

 改成749(只要小于右侧的抗压缩系数即可) ,左侧label优先被挤压,run效果和xib效果一致,就不贴图了:

在试试设置为751,左侧label扬眉吐气,完全展示,右侧label被挤压:


在看看另一个API的作用 

setContentHuggingPriority(拉伸),

  • 这个值越小,就会在宽度多余的情况下,被拉伸。
  • 这个值越大,就会在宽度多余的情况下,优先保持原尺寸。

默认情况下: HuggingPriority == 250

举例:一个labelA的拉伸系数为250,labelB为500,那么空间充足的情况下,LabelA会显示更多。

看代码前,先把label之间间距大于等于10 改为 等于10,这样才会出现父视图宽度 大于 子视图宽度和的情况。

先看默认情况,都设置为250,xib会有报错,并且run效果和xib效果不一致:

在看把左侧label拉伸系数改为100, 左侧填满的父视图剩余空间

左侧label的拉伸系数改为500,左侧内容宽度不变,右侧内容填满父视图空间

 总结一下:

在宽度不够的情况下:

setContentCompressionResistancePriority(抗压缩)生效

  • 这个值越小,优先被压缩。
  • 这个值越大,优先完全展示。

在宽度足够的情况下:

setContentHuggingPriority(拉伸)生效

  • 这个值越小,优先被拉伸。
  • 这个值越大,优先保持原尺寸,拉伸其他视图。

值越小,越会被压缩,拉伸。

值越大,越会保持原有尺寸。


http://www.ppmy.cn/news/76421.html

相关文章

八锁现象——synchronized关键字实战详解

八锁现象 目录 八锁现象哪八种锁&#xff1f;八锁第一锁和第二锁第一锁第二锁第一、二锁解释 八锁第三锁第三锁解释 八锁第四锁第四锁解释 八锁第五锁第五锁解释 八锁第六锁第六锁解释 八锁第七锁第七锁解释 八锁第八锁第八锁解释八锁总结&#xff1a; 羡慕案例中使用sleep方法…

【小菜鸡刷题记】---栈与队列篇

【小菜鸡刷题记】---栈与队列篇 用两个栈模拟一个队列用两个队列实现栈剑指 Offer 58 - I. 翻转单词顺序剑指 Offer 59 - I. 滑动窗口的最大值剑指 Offer 30. 包含min函数的栈剑指 Offer 59 - II. 队列的最大值&#xff08;max函数的队列&#xff09; 特此声明&#xff1a;本篇…

【数据库复习整理】数据库为什么要进行分库和分表以及水平分表和垂直分表

分库和分表原因 数据库进行分库和分表是为了解决大规模数据存储和高并发访问的需求&#xff0c;以提高系统的性能、可扩展性和可用性。以下是分库和分表的主要原因和好处&#xff1a; **分库的原因和好处&#xff1a;** 1. **数据隔离&#xff1a;** 分库将数据划分到不同的…

使用 CameraX 在 Jetpack Compose 中构建相机 Android 应用程序

使用 CameraX 在 Jetpack Compose 中构建相机 Android 应用程序 CameraX 是一个 Jetpack 库&#xff0c;旨在帮助简化相机应用程序的开发。 [camerax官方文档] https://developer.android.com/training/camerax CameraX的几个用例&#xff1a; Image CaptureVideo CapturePrev…

自动化早已不是那个自动化了,谈一谈自动化测试现状和自我感受……

前言 从2017年6月开始接触自动化至今&#xff0c;已经有好几年了&#xff0c;从17年接触UI自动化&#xff08;unittestselenium&#xff09;到18年接触接口自动化&#xff08;unittestrequests&#xff09;再到18年自己编写自动化平台&#xff08;后台使用python的flask&#…

day10 - 使用canny算子进行人像勾勒

本期主要介绍canny算子&#xff0c;了解canny算子的流程以及各个流程的原理和实现。 ​ 完成本期内容&#xff0c;你可以&#xff1a; 了解canny算子的流程和应用 若要运行案例代码&#xff0c;你需要有&#xff1a; 操作系统&#xff1a;Ubuntu 16 以上 或者 Windows10 工…

嘉兴桐乡考证培训-23年教资认定注意事项你知道吗?

又到了新的一年了&#xff0c;去年错过认定的同学们可以竖起耳朵啦~ 每年认定机会有两次&#xff0c;大部分省份一般上半年下半年各一次。 问&#xff1a;在校生可以认定么&#xff1f; 答&#xff1a;可以&#xff0c;但有年级限制&#xff1a;本科生大四最后一学期&#xf…

Linux多路转接之epoll

文章目录 一、select方案和poll方案还存在的缺陷二、epoll的认识1.epoll的基本认识2.epoll的原理3.epoll函数接口 三、编写epoll服务器四、epoll工作方式1.LT模式2.ET模式 一、select方案和poll方案还存在的缺陷 多路转接方案一开始是select方案&#xff0c;但是select方案缺点…