This is what I am using right now:
Swift 4.2
class TextField: UITextField { let padding = UIEdgeInsets(top: 0, left: 5, bottom: 0, right: 5) override open func textRect(forBounds bounds: CGRect) -> CGRect { return bounds.inset(by: padding) } override open func placeholderRect(forBounds bounds: CGRect) -> CGRect { return bounds.inset(by: padding) } override open func editingRect(forBounds bounds: CGRect) -> CGRect { return bounds.inset(by: padding) } }
Swift 4
class TextField: UITextField { let padding = UIEdgeInsets(top: 0, left: 5, bottom: 0, right: 5) override open func textRect(forBounds bounds: CGRect) -> CGRect { return UIEdgeInsetsInsetRect(bounds, padding) } override open func placeholderRect(forBounds bounds: CGRect) -> CGRect { return UIEdgeInsetsInsetRect(bounds, padding) } override open func editingRect(forBounds bounds: CGRect) -> CGRect { return UIEdgeInsetsInsetRect(bounds, padding) } }
Swift 3:
class TextField: UITextField { let padding = UIEdgeInsets(top: 0, left: 5, bottom: 0, right: 5) override func textRect(forBounds bounds: CGRect) -> CGRect { return UIEdgeInsetsInsetRect(bounds, padding) } override func placeholderRect(forBounds bounds: CGRect) -> CGRect { return UIEdgeInsetsInsetRect(bounds, padding) } override func editingRect(forBounds bounds: CGRect) -> CGRect { return UIEdgeInsetsInsetRect(bounds, padding) } }
I never set another indent, but you can customize it. This class does not care about rightView and leftView in the text field. If you want this to be handled correctly, you can use something like (example in objc, and I only need rightView:
- (CGRect)textRectForBounds:(CGRect)bounds { CGRect paddedRect = UIEdgeInsetsInsetRect(bounds, self.insets); if (self.rightViewMode == UITextFieldViewModeAlways || self.rightViewMode == UITextFieldViewModeUnlessEditing) { return [self adjustRectWithWidthRightView:paddedRect]; } return paddedRect; } - (CGRect)placeholderRectForBounds:(CGRect)bounds { CGRect paddedRect = UIEdgeInsetsInsetRect(bounds, self.insets); if (self.rightViewMode == UITextFieldViewModeAlways || self.rightViewMode == UITextFieldViewModeUnlessEditing) { return [self adjustRectWithWidthRightView:paddedRect]; } return paddedRect; } - (CGRect)editingRectForBounds:(CGRect)bounds { CGRect paddedRect = UIEdgeInsetsInsetRect(bounds, self.insets); if (self.rightViewMode == UITextFieldViewModeAlways || self.rightViewMode == UITextFieldViewModeWhileEditing) { return [self adjustRectWithWidthRightView:paddedRect]; } return paddedRect; } - (CGRect)adjustRectWithWidthRightView:(CGRect)bounds { CGRect paddedRect = bounds; paddedRect.size.width -= CGRectGetWidth(self.rightView.frame); return paddedRect; }
Haagenti Nov 21 '14 at 17:13 2014-11-21 17:13
source share