Agregar margen a la izquierda de UITextField

Quiero poner el margen izquierdo del texto de un UITextField en 10 px. ¿Cuál es la mejor manera de hacer eso?

Como ya expliqué en un comentario anterior, la mejor solución en este caso es extender la clase UITextField lugar de usar una categoría, para que pueda usarla explícitamente en los campos de texto deseados.

 #import  @interface MYTextField : UITextField @end @implementation MYTextField - (CGRect)textRectForBounds:(CGRect)bounds { int margin = 10; CGRect inset = CGRectMake(bounds.origin.x + margin, bounds.origin.y, bounds.size.width - margin, bounds.size.height); return inset; } - (CGRect)editingRectForBounds:(CGRect)bounds { int margin = 10; CGRect inset = CGRectMake(bounds.origin.x + margin, bounds.origin.y, bounds.size.width - margin, bounds.size.height); return inset; } @end 

Una categoría está destinada a agregar nuevas funciones a una clase existente, no para anular un método existente.

Puede hacerlo ampliando la clase UITextField y anulando dos métodos:

 - (CGRect)textRectForBounds:(CGRect)bounds; - (CGRect)editingRectForBounds:(CGRect)bounds; 

Aquí está el código:

La interfaz en MYTextField.h

 @interface MYTextField : UITextField @end 

Su implementación en MYTextField.m

 @implementation MYTextField static CGFloat leftMargin = 28; - (CGRect)textRectForBounds:(CGRect)bounds { bounds.origin.x += leftMargin; return bounds; } - (CGRect)editingRectForBounds:(CGRect)bounds { bounds.origin.x += leftMargin; return bounds; } @end 
 UITextField * textField = [[UITextField alloc]init]; [textField setDelegate:self]; [textField setFrame:CGRectMake(170,112,140,25)]; [textField setBorderStyle:UITextBorderStyleNone]; [textField setBackgroundColor:[UIColor clearColor]]; [self.View addSubview:noofChildTField]; UIView *paddingView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 5, 20)] autorelease]; textField.leftView = paddingView; textField.leftViewMode = UITextFieldViewModeAlways; 

Prueba este código

Para Swift 3:

Haga una salida del UITextField , diga usernameTextField. Luego escriba el siguiente código en viewDidLoad()

 let paddingView : UIView = UIView(frame: CGRect(x: 0, y: 0, width: 5, height: 20)) usernameTextField.leftView = paddingView usernameTextField.leftViewMode = .always 

Cambia el width: 5 a un valor mayor si se requiere más espacio.

Esperaba ver una configuración en IB en el inspector de propiedades para ajustar este valor. Resultó que había establecido el estilo de alineación y borde sin darse cuenta a los valores que se mezclaron con el relleno de la izquierda.

No creería que sería un gran problema elegir justificación izquierda y no borde, pero hace que las palabras se superpongan o lleguen al borde de la caja y no se vean bien.

Malo:

enter image description here

Bueno:

enter image description here

Lo solucioné para mí. Espero que esto ayude a alguien más también.

he llegado casi a anular - (CGRect)textRectForBounds:(CGRect)bounds . ahora el problema es cuando TextField ingresa al modo de edición, su margen izquierdo se restablece a cero …….

 @implementation UITextField(UITextFieldCatagory) - (CGRect)textRectForBounds:(CGRect)bounds { CGRect theRect=CGRectMake(bounds.origin.x+10, bounds.origin.y, bounds.size.width-10, bounds.size.height); return theRect; } 

Puedes intentar esto

 TextField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; TextField.textAlignment = UITextAlignmentCenter;