UITextField with Custom Text Padding in Swift

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.

FREE all Swift loading animations.

Loading Animation Example

Follow AdvancedSwift and immediately get access to commented code for these animations that you can use in your projects.

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