Cree espacio al comienzo de un UITextField

Quiero dejar un poco de espacio al comienzo de un UITextField, al igual que aquí: Agregar margen izquierdo a UITextField

Pero no sé cómo hacerlo con Swift.

Esto es lo que estoy usando en este momento:

 class TextField: UITextField { let padding = UIEdgeInsets(top: 0, left: 5, bottom: 0, right: 5); override func textRectForBounds(bounds: CGRect) -> CGRect { return UIEdgeInsetsInsetRect(bounds, padding) } override func placeholderRectForBounds(bounds: CGRect) -> CGRect { return UIEdgeInsetsInsetRect(bounds, padding) } override func editingRectForBounds(bounds: CGRect) -> CGRect { return UIEdgeInsetsInsetRect(bounds, padding) } } 

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

Nunca puse otro relleno, pero puedes modificarlo. Esta class no se ocupa de rightView y leftView en el campo de text. Si quieres que se maneje correctamente, puedes usar algo como (ejemplo en objc y solo necesitaba 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; } 

X, Y, Z son sus valores deseados

 textField.layer.sublayerTransform = CATransform3DMakeTranslation(x, y, z) 

Quería evitar subclassar UITextField para lograr esto, así que pude usar una extensión de la siguiente manera:

 extension UITextField { func setLeftPaddingPoints(_ amount:CGFloat){ let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: amount, height: self.frame.size.height)) self.leftView = paddingView self.leftViewMode = .always } func setRightPaddingPoints(_ amount:CGFloat) { let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: amount, height: self.frame.size.height)) self.rightView = paddingView self.rightViewMode = .always } } 

Luego, cuando necesito configurar el relleno de un campo de text en cualquier lugar de mi aplicación, simplemente hago lo siguiente:

  textField.setLeftPaddingPoints(10) textField.setRightPaddingPoints(10) 

¡Espero que esto ayude!

Misteriosamente este problema se resolvió en mi caso de esta manera … Déjame mostrarte el código. De todos modos estoy usando Xcode 7 + iOS 9 + iPAD Retina.

Ahora aquí está el código para el espacio. Sin embargo, estoy haciendo el marcador de position a través del código duro.

 import UIKit class LoginClass: UIViewController { @IBOutlet weak var userNameTxtFldOutlet: UITextField! @IBOutlet weak var passwordTxtFldOutlet: UITextField! override func viewDidLoad() { super.viewDidLoad() //Making a padding object of view for first textField let paddingForFirst = UIView(frame: CGRectMake(0, 0, 15, self.userNameTxtFldOutlet.frame.size.height)) //Adding the padding to the second textField userNameTxtFldOutlet.leftView = paddingForFirst userNameTxtFldOutlet.leftViewMode = UITextFieldViewMode .Always //Making a padding object of view for second textField let paddingForSecond = UIView(frame: CGRectMake(0, 0, 15, self.passwordTxtFldOutlet.frame.height)) //Adding the padding to the second textField passwordTxtFldOutlet.leftView = paddingForSecond passwordTxtFldOutlet.leftViewMode = UITextFieldViewMode .Always self.userNameTxtFldOutlet.delegate = self self.passwordTxtFldOutlet.delegate = self userNameTxtFldOutlet.attributedPlaceholder = NSAttributedString(string: "Restaurant Name", attributes: [NSForegroundColorAttributeName: UIColor(networking: 51/255, green: 57/255, blue: 67/255, alpha: 1)]) passwordTxtFldOutlet.attributedPlaceholder = NSAttributedString(string: "Password", attributes: [NSForegroundColorAttributeName: UIColor(networking: 51/255, green: 57/255, blue: 67/255, alpha: 1)]) self.navigationController?.navigationBarHidden = true override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } } 

Nada de que preocuparse. Déjame explicarte el Hack. Acabo de agregar un par de espacios antes de que comience el marcador de position.

Acabo de agregar / colocó un object UIView en el lado izquierdo del campo de text con fuerza. Entonces, la tipificación comenzará después de la vista.

Gracias

Espero que esto ayudó …

Solución Swift 3 simple: agregue el código para verlo en LoadDad:

 let indentView = UIView(frame: CGRect(x: 0, y: 0, width: 10, height: 20)) textField.leftView = indentView textField.leftViewMode = .always 

No hay necesidad de código ridículamente largo

Subsorting UITextField es el path a seguir. Abra un área de juegos y agregue el siguiente código:

 class MyTextField : UITextField { var leftTextMargin : CGFloat = 0.0 override func textRectForBounds(bounds: CGRect) -> CGRect { var newBounds = bounds newBounds.origin.x += leftTextMargin return newBounds } override func editingRectForBounds(bounds: CGRect) -> CGRect { var newBounds = bounds newBounds.origin.x += leftTextMargin return newBounds } } let tf = MyTextField(frame: CGRect(x: 0, y: 0, width: 100, height: 44)) tf.text = "HELLO" tf.leftTextMargin = 25 tf.setNeedsLayout() tf.layoutIfNeeded() 

Para crear vista de relleno para UITextField en Swift 3

 func txtPaddingVw(txt:UITextField) { let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: 5, height: 5)) txt.leftViewMode = .always txt.leftView = paddingView } 

Cree UIView con el espacio de relleno necesario y agréguelo al miembro textfield.leftView y establezca el miembro textfield.leftViewMode en UITextFieldViewMode.Always

 // For example if you have textfield named title @IBOutlet weak var title: UITextField! // Create UIView let paddingView : UIView = UIView(frame: CGRectMake(0, 0, 5, 20)) //Change your requinetworking space instaed of 5. title.leftView = paddingView title.leftViewMode = UITextFieldViewMode.Always 

En Swift 3. Puede usar UITextField personalizado con sangría que se establece en su constructor. No necesita statement adicional en un controller.

 class CustomTextField : UITextField { private let indentView = UIView(frame: CGRect(x: 0, y:0, width: 10, height: 10)) requinetworking init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) self.leftView = indentView self.leftViewMode = .always } } 

La respuesta de ScareCrow en Swift 3

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

Coloca este código en tu viewDidLoad() :

 textField.delegate = self let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: 20, height: self.textField.frame.height)) textField.leftView = paddingView textField.leftViewMode = UITextFieldViewMode.always 

Esto funciona para mi 🙂