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

如何消除Changa字体在UILabel中默认的上下空白间距?

解决Changa字体在UILabel中上下空白与行间距过大的问题

我在App中使用Changa字体时,遇到了字体上下存在额外空白、多行文本行间距过大的问题。当前设置UILabel文本与字体的代码如下:

myLabel.font = UIFont(name: "Changa-Regular", size: 14)!
myLabel.text = "Lorem ipsum"

从截图中能看到:第二个黄色标签的两行字体间距明显过大;给第一个黄色标签添加背景色后,也能观察到字体本身带有上下空白。

以下是几种可行的解决方法:

  • 自定义UILabel缩小内边距
    通过重写drawText(in:)方法,调整文本绘制的内边距,直接削减上下空白:
class CustomChangaLabel: UILabel {
    override func drawText(in rect: CGRect) {
        // 上下偏移值根据实际字号调整,避免文字被裁剪
        let insets = UIEdgeInsets(top: -3, left: 0, bottom: -2, right: 0)
        super.drawText(in: rect.inset(by: insets))
    }
}
  • 调整段落样式缩小行间距
    针对多行文本的行间距问题,用NSMutableParagraphStyle的lineHeightMultiple属性来压缩行高:
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.lineHeightMultiple = 0.85 // 小于1的数值会缩小行间距,按需微调
let attrString = NSAttributedString(
    string: "Lorem ipsum",
    attributes: [
        .font: UIFont(name: "Changa-Regular", size: 14)!,
        .paragraphStyle: paragraphStyle
    ]
)
myLabel.attributedText = attrString
  • 基于字体属性精准调整
    利用字体本身的ascender、descender属性计算多余空白,做更精准的适配:
let font = UIFont(name: "Changa-Regular", size: 14)!
// 计算字体实际占用的高度
let actualHeight = font.ascender - font.descender
// 算出需要调整的行间距值
let adjustedLineSpacing = actualHeight - font.lineHeight

let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.lineSpacing = adjustedLineSpacing

let attrString = NSAttributedString(
    string: "Lorem ipsum",
    attributes: [
        .font: font,
        .paragraphStyle: paragraphStyle
    ]
)
myLabel.attributedText = attrString

这种方法能适配不同字号的Changa字体,避免手动调整偏移值的误差。

  • 修改字体源文件(进阶)
    如果上述代码层面的调整达不到预期,可以用FontForge这类字体编辑工具,打开Changa字体文件,修改字体的内边距(字体的"OS/2"或"hhea"表中的相关参数),重新导出后导入项目使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 23:03:19