当前位置: 首页 > news >正文

setContentHuggingPriority和setContentCompressionResistancePriority的使用

需求:

两个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.lryc.cn/news/70421.html

相关文章:

  • java springboot yml文件配置 多环境yml
  • DMBOK知识梳理for CDGA/CDGP——第一章数据管理(附常考知识点)
  • 065:cesium设置带有箭头的线材质(material-9)
  • Java常用API
  • 【C++ 学习 ⑥】- C++ 动态内存管理详解
  • 【5.21】六、自动化测试—常见技术
  • JavaScript中的事件循环机制,包括事件循环的原理、宏任务和微任务、事件队列和调用栈、以及如何优化事件循环
  • 【华为OD机试c++】解压报文【2023 B卷 |200分】
  • JS中Array的forEach、map、filter方法区别?
  • Java的Arrays类的sort()方法(41)
  • Redis安装及其配置文件修改
  • VSOMEIP3抓包数据
  • 基于PyQt5的图形化界面开发——Windows内存资源监视助手[附带编译exe教程]
  • Linus Torvalds发布了第一个Linux内核6.4候选版本
  • 由浅入深Dubbo核心源码剖析环境介绍
  • Java 远程连接 SQLite 数据库
  • 网安面试题大全(附答案)
  • windows 系统扩容C盘注意事项
  • 接入支付宝沙箱环境
  • 用原生JS实现虚拟列表(IT枫斗者)
  • FAT NTFS Ext3文件系统有什么区别
  • 信息收集思路
  • Tauri应用开发(二):创建第一个Tauri应用
  • 自信裸辞:一晃 ,失业都3个月了.....
  • Python3 输入和输出
  • Mybatis Plus 使用@TableLogic实现逻辑删除
  • 2023/5/23总结
  • Squid代理服务器应用
  • 网络编程中的sockfd是什么?
  • 如何利用Citespace和vosviewer既快又好地写出高质量的论文及快速锁定热点和重点文献进行可视化分析?