위와 같은 제목을 치면 아래와 같은 포스팅 들이 많이 나온다
하지만
나는 이러한 button 두개를 하나의 view에 넣어 높이를 맞추어야 하는 상황에서
sizeToFit을 하면 view의 높이를 알 수 없었기 때문에 반드시 위쪽 정렬이 필요하다 느꼈다.
그래서 찾아본 결과
기존에 CustomButton에서 사용하던 UILabel 대신 VerticalAlignLabel형을 명시해줌으로서 간단히 해결할 수 있었다.
위와 같은 버튼을 만드는 법을 알고 싶은 분이라면
이전 포스팅을 참고하시길 바랍니다.
public class VerticalAlignLabel: UILabel {
enum VerticalAlignment {
case top
case middle
case bottom
}
var verticalAlignment : VerticalAlignment = .top {
didSet {
setNeedsDisplay()
}
}
override public func textRect(forBounds bounds: CGRect, limitedToNumberOfLines: Int) -> CGRect {
let rect = super.textRect(forBounds: bounds, limitedToNumberOfLines: limitedToNumberOfLines)
if UIView.userInterfaceLayoutDirection(for: .unspecified) == .rightToLeft {
switch verticalAlignment {
case .top:
return CGRect(x: self.bounds.size.width - rect.size.width, y: bounds.origin.y, width: rect.size.width, height: rect.size.height)
case .middle:
return CGRect(x: self.bounds.size.width - rect.size.width, y: bounds.origin.y + (bounds.size.height - rect.size.height) / 2, width: rect.size.width, height: rect.size.height)
case .bottom:
return CGRect(x: self.bounds.size.width - rect.size.width, y: bounds.origin.y + (bounds.size.height - rect.size.height), width: rect.size.width, height: rect.size.height)
}
} else {
switch verticalAlignment {
case .top:
return CGRect(x: bounds.origin.x, y: bounds.origin.y, width: rect.size.width, height: rect.size.height)
case .middle:
return CGRect(x: bounds.origin.x, y: bounds.origin.y + (bounds.size.height - rect.size.height) / 2, width: rect.size.width, height: rect.size.height)
case .bottom:
return CGRect(x: bounds.origin.x, y: bounds.origin.y + (bounds.size.height - rect.size.height), width: rect.size.width, height: rect.size.height)
}
}
}
override public func drawText(in rect: CGRect) {
let r = self.textRect(forBounds: rect, limitedToNumberOfLines: self.numberOfLines)
super.drawText(in: r)
}
}
소스 출처:
'iOS 프로그래밍' 카테고리의 다른 글
UserDefaults에 custom object 저장하기 (0) | 2020.10.29 |
---|---|
[swift] storyboard가 아닌 SnapKit 라이브러리를 사용하여 autoLayout 설정하기 - customButton(radioButton) (0) | 2020.08.06 |