如何消除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
相关产品推荐
相关产品推荐

