iOS/UIKIT

UILabel 에서 패딩 효과를 주고 싶다면?

밤새는 탐험가89 2024. 10. 30. 12:53

UILabel은 기본적으로 내부 텍스트에 패딩을 줄 수 있는 기능이 없습니다. 하지만 패딩을 넣고 싶은 경우 다음과 같은 두 가지 방법으로 구현할 수 있습니다:

1. UILabel을 서브클래싱하여 패딩 추가하기

UILabel의 서브클래스를 생성하여 textInsets를 설정하면 패딩을 직접 추가할 수 있습니다.

class PaddedLabel: UILabel {
    var textInsets = UIEdgeInsets(top: 4, left: 8, bottom: 4, right: 8) // 원하는 패딩

    override func drawText(in rect: CGRect) {
        super.drawText(in: rect.inset(by: textInsets))
    }
    
    override var intrinsicContentSize: CGSize {
        let originalSize = super.intrinsicContentSize
        let width = originalSize.width + textInsets.left + textInsets.right
        let height = originalSize.height + textInsets.top + textInsets.bottom
        return CGSize(width: width, height: height)
    }
}

 

이렇게 PaddedLabel을 사용하면 기본 UILabel과 비슷하게 패딩을 적용할 수 있습니다.

2. UILabel을 감싸는 UIView 사용하기

패딩을 위한 UIView를 만들어 그 안에 UILabel을 추가하는 방법입니다. UIView는 패딩을 쉽게 조절할 수 있어 UILabel을 직접 서브클래싱하지 않고도 구현이 가능합니다.

let paddedView = UIView()
paddedView.backgroundColor = .systemGray // 배경색 지정
paddedView.layer.cornerRadius = 4 // 둥근 모서리 설정
paddedView.translatesAutoresizingMaskIntoConstraints = false

let categoryLabel: UILabel = {
    let label = UILabel()
    label.text = "문화시설"
    label.font = .systemFont(ofSize: 12, weight: .regular)
    label.textColor = .white
    label.translatesAutoresizingMaskIntoConstraints = false
    return label
}()

paddedView.addSubview(categoryLabel)

// 패딩을 위한 제약 추가
NSLayoutConstraint.activate([
    categoryLabel.topAnchor.constraint(equalTo: paddedView.topAnchor, constant: 4),
    categoryLabel.leadingAnchor.constraint(equalTo: paddedView.leadingAnchor, constant: 8),
    categoryLabel.bottomAnchor.constraint(equalTo: paddedView.bottomAnchor, constant: -4),
    categoryLabel.trailingAnchor.constraint(equalTo: paddedView.trailingAnchor, constant: -8)
])

 

이 구조는 paddedView 안에서 UILabel의 위치를 지정하여 원하는 패딩을 적용할 수 있도록 합니다. 이 paddedView를 다른 뷰에 추가하면 UILabel의 패딩을 간단하게 적용할 수 있습니다.