관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] UILabel 라인 간 간격 (spacing, 간격, NSMutableAttributedString, ) 본문

iOS 응용 (swift)

[iOS - swift] UILabel 라인 간 간격 (spacing, 간격, NSMutableAttributedString, )

jake-kim 2021. 10. 23. 03:18

기본 개념

  • NSMutableAttributedString
    • 텍스트 + 속성값을 가지고 있는 인스턴스
    • 속성값: 텍스트 색상, 폰트, 하이퍼링크 등

  • NSMutableParagraphStyle
    • 텍스트에 속성을 주입할 수 있는 인스턴스

UILabel에 간격 부여 방법

extension UILabel {
    func setLineSpacing(spacing: CGFloat) {
    
    }
}
  • text를 생성자로 주입하여 NSMutableAttributedString 인스턴스를 생성
guard let text = text else { return }

let attributeString = NSMutableAttributedString(string: text)
  • NSMutableParagraphStyle 인스턴스에 속성을 추가하고 이 인스턴스에 속성을 부여한 후, NSMutableAttributedString에 적용
style.lineSpacing = spacing
attributeString.addAttribute(.paragraphStyle,
                             value: style,
                             range: NSRange(location: 0, length: attributeString.length))
  • UILabel 자체적으로 가지고 있는 attributedText 프로퍼티에 대입

UILabel이 내부적으로 attributedText 프로퍼티 소유

attributedText = attributeString
  • extension 전체 코드
extension UILabel {
    func setLineSpacing(spacing: CGFloat) {
        guard let text = text else { return }

        let attributeString = NSMutableAttributedString(string: text)
        let style = NSMutableParagraphStyle()
        style.lineSpacing = spacing
        attributeString.addAttribute(.paragraphStyle,
                                     value: style,
                                     range: NSRange(location: 0, length: attributeString.length))
        attributedText = attributeString
    }
}

* 이 밖에도 NSMutableParagraphStyle에 아래와 같은 프로퍼티 속성 존재

사용하는 쪽 코드

class ViewController: UIViewController {
    @IBOutlet weak var label1: UILabel!
    @IBOutlet weak var label2: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()

        label1.numberOfLines = 0
        label2.numberOfLines = 0

        label1.text = "iOS 앱 개발 알아가기 1\n라인 간 간격 테스트\n예제 문구입니다.(간격 미적용)"

        label2.text = "iOS 앱 개발 알아가기 2\n라인 간 간격 테스트\n예제 문구입니다.(간격 적용)"
        label2.setLineSpacing(spacing: 15.0)

    }
}

* 참고

- NSMutableAttributedString: https://developer.apple.com/documentation/foundation/nsmutableattributedstring

- NSMutableParagraphStyle: https://developer.apple.com/documentation/uikit/nsmutableparagraphstyle

Comments