UITextField에 text margin 넣기

SteadySlower·2023년 7월 25일
0

iOS Development

목록 보기
29/38

글자가 border에 딱 붙는 현상

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)
    }
    
}

profile
백과사전 보다 항해일지(혹은 표류일지)를 지향합니다.

0개의 댓글