如何设置UILabel的行高?
Swift 中UILabel自定义行高的可复用实现方案
我此前检索相关解决方案时,未在StackOverflow找到可直接复用的稳定实现,调整现有公开方案后整理出以下兼容多场景的实现,可直接使用:
- 首先给UILabel加扩展,内置行高偏移修正,避免文字显示位置偏上的问题,代码如下:
import UIKit extension UILabel { /// 为Label设置自定义行高 /// - Parameters: /// - targetLineHeight: 自定义的目标行高 /// - textAlignment: 文本对齐方式,默认值为靠左对齐 func setLineHeight(_ targetLineHeight: CGFloat, textAlignment: NSTextAlignment = .left) { guard let currentText = text else { return } let paragraphStyle = NSMutableParagraphStyle() paragraphStyle.minimumLineHeight = targetLineHeight paragraphStyle.maximumLineHeight = targetLineHeight paragraphStyle.alignment = textAlignment paragraphStyle.lineBreakMode = lineBreakMode // 修正文本垂直偏移,适配不同字号的显示效果 let baselineOffset = (targetLineHeight - font.lineHeight) / 4 let attributedContent = NSAttributedString( string: currentText, attributes: [ .paragraphStyle: paragraphStyle, .baselineOffset: baselineOffset, .font: font as Any, .foregroundColor: textColor as Any ] ) attributedText = attributedContent } }
- 调用方式非常简单,直接对目标Label实例调用方法即可:
let demoLabel = UILabel() demoLabel.text = "这是一段多行测试文本,用于验证自定义行高的显示效果,你可以根据需求自由调整目标行高参数。" demoLabel.numberOfLines = 0 // 设置行高为24pt demoLabel.setLineHeight(24)
注意:修改Label的
text属性后需要重新调用行高设置方法,新文本才会应用自定义行高;如果你的项目需要兼容自定义属性文本,可以基于上述逻辑自行扩展适配attributedText的版本。
内容的提问来源于stack exchange,提问作者Daniyar
相关产品推荐
相关产品推荐

