iOS/UIKit

[iOS] Label에 Padding 주기(StoryBoard), Label에 cornerRadius 주기

유훈 | Yuhun 2022. 3. 2. 02:41
반응형

Label에 padding 주기

 

라벨에 패딩을 쉽게 주는 방법을 알아보겠습니다. 사실 저장해두고 써먹으려는...

(근데 왜 CSS 처럼 padding이나 margin이 없을까...?)
암튼 View 안에 label을 넣어 padding을 주는 방법도 있다고 하는데 여기서는 @IBDesignable을 이용하도록 하겠습니다.

 

@IBDesignable을 설정해주면 스토리보드에서 클릭으로 설정이 가능한 창이 생성됩니다.

사용 방법은 간단합니다.

 

1. Swift 파일을 만든다.

2. Label의 class에 만든 Swift의 class를 할당해준다.

3. 속성 인스펙터에 새로운 창이 생겼으니 padding을 조절하면 된다!

import Foundation
import UIKit

@IBDesignable class PaddingLabel: UILabel {
    
    @IBInspectable var topPadding: CGFloat = 0.0
    @IBInspectable var leftPadding: CGFloat = 0.0
    @IBInspectable var bottomPadding: CGFloat = 0.0
    @IBInspectable var rightPadding: CGFloat = 0.0
    
    convenience init(padding: UIEdgeInsets) {
        self.init()
        self.topPadding = padding.top
        self.leftPadding = padding.left
        self.bottomPadding = padding.bottom
        self.rightPadding = padding.right
    }
    
    override func drawText(in rect: CGRect) {
        let padding = UIEdgeInsets.init(top: topPadding, left: leftPadding, bottom: bottomPadding, right: rightPadding)
        super.drawText(in: rect.inset(by: padding))
    }
    
    override var intrinsicContentSize: CGSize {
        var contentSize = super.intrinsicContentSize
        contentSize.width += self.leftPadding + self.rightPadding
        contentSize.height += self.topPadding + self.bottomPadding
        return contentSize
    }
}

 

Label에 cornerRadius 주기

 

button 처럼 label을 둥글게 만드려 했지만 잘 되지 않았습니다.
찾아본 결과 clipsToBound를 true로 해주고 radius를 설정해 주면 잘 되었습니다!

(참고로 clipsToBound는 요소가 삐져나가지 않도록 하는 속성이라고 합니다.)

 

예제 코드

self.someLabel.clipsToBounds = true
self.someLabel.layer.cornerRadius = 15
반응형