UITextField에 border를 적용해서 사용하려고 하는 경우 아래와 같이 border에 입력한 글자 혹은 placeholder가 너무 딱 붙는 경우가 있습니다. 이런 경우 UIEdgeInsets과 textRect, editingRect 2개의 함수를 overriding해서 해결할 수 있습니다.
textRect은 텍스트를 입력 중이 아닐 때 텍스트가 차지하는 영역을 정해주는 메소드입니다. editingRect의 경우 텍스트를 수정 중일 때 텍스트가 차지하는 영역을 정해주는 메소드입니다.
두 메소드를 override해서 원하는 padding을 UIEdgeInsets을 활용해서 적용해줍니다.
class AuthTextField: UITextField {
// 패딩설정
let padding = UIEdgeInsets(top: 0, left: 14, bottom: 0, right: 14)
init(placeholder: String) {
super.init(frame: .zero)
self.placeholder = placeholder
borderStyle = .none
layer.borderColor = UIColor.appGray2.cgColor
layer.borderWidth = 1.0
layer.cornerRadius = 20
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
// 텍스트를 수정하지 않을 때의 text가 차지하는 영역
override func textRect(forBounds bounds: CGRect) -> CGRect {
return bounds.inset(by: padding)
}
// 텍스트를 수정할 때 text가 차지하는 영역
override func editingRect(forBounds bounds: CGRect) -> CGRect {
return bounds.inset(by: padding)
}
}