This post presents a subclass of UITextField with custom text padding. Following the method in this post will allow you to change tthe spacing between the frame of a UITextField and the contained text.

Subclass UITextField

The first step is to subclass UITextField and define the desired text padding.

class TextFieldWithPadding: UITextField {
    var textPadding = UIEdgeInsets(
        top: 10, 
        left: 20, 
        bottom: 10, 
        right: 20
    )
}

Override textRect(forBounds:) and editingRect(forBounds:)

The next step is to override textRect(forBounds:) -> CGRect and editingRect(forBounds:) -> CGRect. Use textRect(bounds:) -> CGRect to return the drawable area for the text in a UITextField. Use editingRect(forBounds:) -> CGRect to return the area in the UITextField where editable text can be displayed.

class TextFieldWithPadding: UITextField {
    var textPadding = UIEdgeInsets(
        top: 10, 
        left: 20, 
        bottom: 10, 
        right: 20
    )

    override func textRect(forBounds bounds: CGRect) -> CGRect {
        let rect = super.textRect(forBounds: bounds)
        return rect.inset(by: textPadding)
    }

    override func editingRect(forBounds bounds: CGRect) -> CGRect {
        let rect = super.editingRect(forBounds: bounds)
        return rect.inset(by: textPadding)
    }
}

UITextField With Text Padding

That’s it! With the TextFieldWithPadding implementation you can achieve the following results:

UITextField with custom text spacing example