Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

원블루의 블로그

[Swift] UILabel의 attributedText에 lineHeight 줄간격 설정하기 본문

iOS 개발

[Swift] UILabel의 attributedText에 lineHeight 줄간격 설정하기

원블루:) 2024. 8. 22. 14:46

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
}