Notice
Recent Posts
Recent Comments
Link
관리 메뉴

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

[iOS - swift] padding label (UILabel에 padding값 주는 방법) 본문

iOS 응용 (swift)

[iOS - swift] padding label (UILabel에 padding값 주는 방법)

jake-kim 2021. 9. 12. 00:41

padding 주는 방법

  • 보통 stackView에 label을 넣을때 UIView를 넣고 그 안에 다시 Label을 넣어서 layout을 조절할 수 있지만, UILabel에 따로 padding값을 주어서 사용 가능

padding label

Padding 주는 방법 - drawText(in:)에서 padding값 설정

  • drawText(in:) 메소드 활용: label의 text값이 그려질때 rect에 관한 값을 수정하고 싶을때 해당 메소드를 override하여 사용

  • 사용 방법은 super.drawText(in:)에 변경된 rect값을 인수로 주어 반영

  • super를 사용
class BasePaddingLabel: UILabel {
    private var padding = UIEdgeInsets(top: 16.0, left: 16.0, bottom: 16.0, right: 16.0)

    override func drawText(in rect: CGRect) {
        super.drawText(in: rect.inset(by: padding))
    }
}

Padding값 설정 후 intrinsicContentSize 수정

  • padding을 변경한다고 intrinsicContentSize가 변경되지 않기 때문에, label.text의 내용이 잘리는 현상 발생하거나 top, bottom이 적용 안된 상태로 적용 > intrinsicContentSize 업데이트 필요

top, bottom에 padding 미적용된 상황

  • intrinsicContentSize를 재정의하여 적용
override var intrinsicContentSize: CGSize {
    var contentSize = super.intrinsicContentSize
    contentSize.height += padding.top + padding.bottom
    contentSize.width += padding.left + padding.right

    return contentSize
}

  • convenience init()을 추가하여 생성할때 padding을 설정할 수 있도록 편의를 위해 생성
convenience init(padding: UIEdgeInsets) {
    self.init()
    self.padding = padding
}
  • 최종 코드
class BasePaddingLabel: UILabel {
    private var padding = UIEdgeInsets(top: 16.0, left: 16.0, bottom: 16.0, right: 16.0)

    convenience init(padding: UIEdgeInsets) {
        self.init()
        self.padding = padding
    }

    override func drawText(in rect: CGRect) {
        super.drawText(in: rect.inset(by: padding))
    }

    override var intrinsicContentSize: CGSize {
        var contentSize = super.intrinsicContentSize
        contentSize.height += padding.top + padding.bottom
        contentSize.width += padding.left + padding.right

        return contentSize
    }
}

* 전체 소스 코드: https://github.com/JK0369/PaddingEx

* 참고

- drawText(in:): https://developer.apple.com/documentation/uikit/uilabel/1620527-drawtext

 

Comments