본문 바로가기
개발/ios

UIEdgeInsets 없이 UILabel에 여백 넣기

by 매몰 2018. 5. 8.

UILabel에 여백을 넣는 방법은 다양하다.

그 중 NSLayoutConstraint를 이용하는 법을 다뤄보자!

 

 

 

 

 

class FitLabel: UILabel {

 

    //상하좌우 여백 storyboard 입력값

    @IBInspectable var edge: CGSize = CGSize(width: 0, height: 0)

    

    //너비, 높이가 적용될 Constraint

    private var mWidthConstraint, mHeightConstraint: NSLayoutConstraint?

    

    //좌우 여백값

    var edgeAllWidth: CGFloat {

        return edge.width * 2

    }

    

    //상하 여백값

    var edgeAllHeight: CGFloat {

        return edge.height * 2

    }

    

    override func awakeFromNib() {

        super.awakeFromNib()

        

        //storyboard에서 초기화된 글자로 맞춤

        fit()

    }

 

    func set(fitText text: String) {

        //코드상에서 글자를 직접 넣어 맞춤

        self.text = text

        fit()

    }

    

    private func fit() {

        //글자 + 여백 크기

        let width = intrinsicContentSize.width + edgeAllWidth

        let height = intrinsicContentSize.height + edgeAllHeight

 

        if mWidthConstraint == nil && mHeightConstraint == nil {

            //첫 실행때만 Constraint를 추가

            

            //Constraint를 직접 추가하기 위해 오토사이징 끔

            translatesAutoresizingMaskIntoConstraints = false

            

            //위의 글자 + 여백 크기를 너비,높이 Constraint로 생성하고 추가

            let widthConstraint = NSLayoutConstraint(item: self, attribute: .width, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: width)

            let heightConstraint = NSLayoutConstraint(item: self, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: height)

            addConstraint(widthConstraint)

            addConstraint(heightConstraint)

            mWidthConstraint = widthConstraint

            mHeightConstraint = heightConstraint

        }

        else {

            //두번째부터는 Constraint의 수치만 변경

            mWidthConstraint!.constant = width

            mHeightConstraint!.constant = height

        }

        

        //중앙 정렬

        textAlignment = .center

    }

 

}

 

 

 

핵심 원리는 그저 글자 전체크기를 불러와 여백을 더하여 NSLayoutConstraint를 만드는 것이다.

너무 간단해서 더이상 설명이 필요없다ㅎㅎ

 

 

 

 

 

 

 

도움이 되셨다면~ 정성으로 빚은 저희 앱!  많은 이용 바래요:)

 

https://meorimal.com/index.html?tab=spaceship

 

우주선 - 방치형 인공지능 투자 체험기

미리 맛보는 인공지능 투자!

(주)머리말 meorimal.com

 

https://meorimal.com/subway.html

 

지하철어디있니

더이상 고민하지 마세요. 뛸지 말지 딱 보면 알죠.

(주)머리말 meorimal.com

 

사업자 정보 표시
주식회사 머리말 | 고영진 | 서울특별시 송파구 중대로 135 서관 10층 (가락동, 아이티벤처타워) | 사업자 등록번호 : 524-88-00727 | TEL : 010-9990-3674 | Mail : gyjmeba@hanmail.net | 통신판매신고번호 : 2017-서울강남-03941호 | 사이버몰의 이용약관 바로가기