Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- clean architecture
- SWIFT
- swiftUI
- uitableview
- RxCocoa
- 리펙토링
- 애니메이션
- Human interface guide
- 리팩토링
- map
- tableView
- UICollectionView
- UITextView
- ribs
- Protocol
- Refactoring
- swift documentation
- combine
- uiscrollview
- Clean Code
- Observable
- 클린 코드
- collectionview
- ios
- HIG
- 리펙터링
- MVVM
- Xcode
- rxswift
- 스위프트
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] padding label (UILabel에 padding값 주는 방법) 본문
padding 주는 방법
- 보통 stackView에 label을 넣을때 UIView를 넣고 그 안에 다시 Label을 넣어서 layout을 조절할 수 있지만, UILabel에 따로 padding값을 주어서 사용 가능
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 업데이트 필요
- 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
'iOS 응용 (swift)' 카테고리의 다른 글
Comments