You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让水平StackView中两个Label自动同步字号(AutoLayout+AutoShrink)

解决两个并排Label同步缩字号的问题

关键问题根源

系统默认的AutoShrink是单个Label独立计算字号的,所以会出现一个缩、一个不缩的情况。要同步缩放,得让两个Label共享字号规则,同时保证它们的可用空间联动。

分步解决方法

1. 修改水平StackView的Distribution设置

把水平StackView的Distribution从Equal Spacing改成Fill Equally。这样两个Label会平分StackView的可用宽度,确保它们的空间压力一致,不会出现一个有富余空间、一个挤得慌的情况。

2. 绑定两个Label的字号

不管用代码还是Storyboard,都要给两个Label添加字号相等的约束:

  • 代码实现(Swift):
// 先给两个Label设相同的初始字号
let initialFont = UIFont.systemFont(ofSize: 16)
leftLabel.font = initialFont
rightLabel.font = initialFont

// 添加字号相等约束,配合等宽约束更稳妥
NSLayoutConstraint.activate([
    leftLabel.fontSizeAnchor.constraint(equalTo: rightLabel.fontSizeAnchor),
    leftLabel.widthAnchor.constraint(equalTo: rightLabel.widthAnchor)
])
  • Storyboard/Xib操作:选中两个Label,右键拖出约束,选择Font Size相等,同时添加Width相等约束。

3. 统一AutoShrink配置

两个Label都按以下设置调整:

  • 开启Adjusts Font Size to Fit Width
  • 将AutoShrink设为Minimum Font Scale,计算对应最小9pt的缩放比例(比如初始字号16pt的话,比例为9/16=0.5625),两个Label设成相同比例
  • 保持Number of Lines为1,确保文本不换行

4. 处理无空格长文本

对于不带空格的长串文本,给Label设置Line Break为Clip,同时确保Adjusts Font Size to Fit Width处于开启状态,这样文本会自动缩字号适应宽度,不会超出边界。

5. 检查StackView的约束逻辑

确保水平StackView的宽度贴合父容器(垂直StackView),内边距设置正确,没有额外的固定宽高约束限制它的自适应空间。

测试验证

  • 小屏幕(如iPhone SE):两个Label同步缩到合适字号,保持同一行,间距均匀
  • 单个Label超长:不管哪一个文本过长,两个Label都会同步缩小到相同字号,不会出现字号不一致的情况
  • 无空格长串:Label自动缩字号且不换行,另一个Label同步缩放

内容的提问来源于stack exchange,提问作者wasi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 17:12:40