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
https://meorimal.com/subway.html
'개발 > ios' 카테고리의 다른 글
SwiftUI TextField 에서 placeholder color 변경하기 (0) | 2022.07.29 |
---|---|
스레드에서 반복문으로 UI를 변경할때 주의할점 (0) | 2018.07.30 |
손쉽게 아이폰 앱을 새로 실행 시키는 코드 한줄 (1) | 2018.03.26 |
UIView의 원 테두리가 얇거나 작아보일때... (0) | 2018.01.29 |
NSString을 마치 UILabel인 양 사용하기 (0) | 2017.11.20 |