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

使用adjustsFontSizeToFitWidth时UILabel文本底部被截断问题咨询

解决UILabel自动适配宽度时文本底部截断的问题

兄弟,我太懂这种糟心的情况了——设置了自动缩字体适配宽度,结果文本下半截没显示全,尤其是带g、y这种有下行部分的字符时特别明显。结合你给出的Label配置,咱们来一步步解决:

先唠唠为啥会出现这个问题

你的Label是顶部、左侧、右侧固定约束,没有高度或底部约束,系统默认会用原始字体(36pt半粗体)的lineHeight来计算Label高度。但当adjustsFontSizeToFitWidth触发字体缩小后,Label的高度并不会自动跟着调整;再加上baselineAdjustment = .alignCenters这个设置,会让缩小后的文本在Label的原始高度里垂直居中,这下带下行部分的字符自然就被底部截断了。

靠谱的解决办法来啦

  • 调整baselineAdjustment属性
    把baselineAdjustment改成.alignBaselines或者.none试试。.alignCenters是罪魁祸首之一——它会强制缩放后的文本在原始高度里居中,导致下行部分超出Label边界;换成.alignBaselines会保持文本基线对齐,给下行字符留足空间;.none则会让文本按原始基线位置布局,也能避免截断。
    代码示例:

    label.baselineAdjustment = .alignBaselines
    
  • 让Label高度跟着缩放后的字体走
    既然你的Label没有高度约束,系统只会认原始字体的高度。你可以在设置完文本后,让Label自动调整高度:

    // 非自动布局环境直接调用
    label.sizeToFit()
    
    // 自动布局环境下,绑定高度到intrinsicContentSize
    label.heightAnchor.constraint(equalToConstant: label.intrinsicContentSize.height).isActive = true
    

    这样Label的高度就会根据实际显示的字体大小自适应,不会再用原始高度卡着了。

  • 开启字间距适配辅助
    有时候没必要把字体缩得太小,开启adjustsLetterSpacingToFitWidth,让Label通过微调字间距来适配宽度,减少字体缩小的幅度,也能间接避免截断问题:

    label.adjustsLetterSpacingToFitWidth = true
    
  • 给底部加一点点内边距
    如果上面的方法还不够,手动给Label加个底部内边距,给下行字符留缓冲空间:

    label.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 2, right: 0)
    

    这个数值可以根据实际显示效果微调,比如2pt或3pt就行,不用太大。

你可以先试试调整baselineAdjustment,这个是最直接的;如果不行再结合动态调整高度或者内边距,应该就能搞定底部截断的问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:49:17