원블루의 블로그
[Swift] UILabel의 attributedText에 lineHeight 줄간격 설정하기 본문
Line Height는 텍스트 한 줄의 높이를 나타낸다.
Line Height를 이용하면 줄간격을 조정할 수 있다.
UIKit에서는 NSParagraphStyle의 lineHeightMultiple 값으로 Line Height를 상대적으로 설정한다.
예를 들어 글자크기가 10pt 일 때 lineHeightMultiple 값을 1.5로 하면 줄높이(줄간격)는 15pt가 된다.
시스템 기본값을 사용하고 싶다면 0으로 설정해 주면 된다.
아래코드는 NSMutableAttributedString에서 기존 ParagraphStyle을 유지하면서 lineHeight 값을 설정하는 Extension 함수이다.
extension NSMutableAttributedString {
@objc func lineHeight(_ value: CGFloat) -> NSMutableAttributedString {
// 1. 기존 NSAttributedString이 빈값이 아닌지 확인한다.
let mutableAttriString = NSMutableAttributedString(attributedString: self)
guard mutableAttriString.length > 0 else { return mutableAttriString }
// 2. 기존 NSAttributedString에서 paragraphStyle을 가져온다.
let currentParagraphStyle = mutableAttriString.attribute(.paragraphStyle, at: 0, effectiveRange: nil) as? NSMutableParagraphStyle ?? NSMutableParagraphStyle()
// 3. 기존 paragraphStyle을 복제한다.
let newParagraphStyle = currentParagraphStyle.mutableCopy() as! NSMutableParagraphStyle
// 4. 복제된 paragraphStyle에 lineHeightMultiple 값을 설정한다.
newParagraphStyle.lineHeightMultiple = value
// 5. 복제된 paragraphStyle를 NSAttributedString의 paragraphStyle로 설정한다.
mutableAttriString.addAttribute(.paragraphStyle, value: newParagraphStyle, range: NSRange(location: 0, length: mutableAttriString.length))
return mutableAttriString
}
}
아래 샘플코드처럼 사용할 수 있다.
func sample() {
let label = UILabel()
let string = "Sample String"
let stringWithLineHeight = NSMutableAttributedString(string: string).lineHeight(1.5)
label.attributedText = stringWithLineHeight
}