如何设置约束实现双Label自适应布局且避免重叠?
双Label水平自适应布局解决方案
一、基础约束设置
- 左侧Label(leftLabel):
- 左边缘与父视图左边缘设固定间距(如
16pt) - 垂直方向按需设置(如顶部与父视图间距
16pt)
- 左边缘与父视图左边缘设固定间距(如
- 右侧Label(rightLabel):
- 右边缘与父视图右边缘设固定间距(如
16pt) - 垂直方向与leftLabel对齐(如顶部对齐)
- 右边缘与父视图右边缘设固定间距(如
- 间距约束:添加
leftLabel.trailing <= rightLabel.leading - 8pt,确保两个Label之间最小间距为8pt,永不重叠
二、宽度约束与优先级配置
- 给两个Label添加宽度相等约束,优先级设为
750(低于系统默认的1000,允许内容不多时被打破) - 调整布局优先级:
- 两个Label的Horizontal Content Hugging Priority(水平内容拥抱优先级)设为
251(略高于系统默认的250,让Label优先保持自身内容宽度) - 两个Label的Horizontal Compression Resistance Priority(水平压缩抗拒优先级)设为
749(低于宽度相等约束的750,允许Label在空间不足时被压缩)
- 两个Label的Horizontal Content Hugging Priority(水平内容拥抱优先级)设为
三、Label属性设置
- 将两个Label的
numberOfLines设为1(单行显示) - 设置
lineBreakMode为.byTruncatingTail(内容过长时尾部截断,也可按需选择.byTruncatingMiddle或.byTruncatingHead)
布局逻辑说明
- 当两个Label内容都较少时:内容拥抱优先级高于宽度相等约束,Label会根据自身内容自适应宽度,同时保持最小间距,不会重叠
- 当任一Label内容过多时:压缩抗拒优先级低于宽度相等约束,空间不足时Label会被压缩并触发内容截断,同时强制保持宽度相等(均分剩余可用空间),确保两者始终不重叠
内容的提问来源于stack exchange,提问作者Maverick
相关产品推荐
相关产品推荐

