left inset ios uitextfield alignment

ios - inset - ¿Cómo centro verticalmente el Texto UITextField?



margin textfield swift (4)

En el guión gráfico: bajo control -> cambie la alineación vertical y horizontal, según sus necesidades.

Simplemente estoy instanciando un UITextField y notando que el texto no se centra verticalmente. En cambio, está alineado con la parte superior de mi botón, lo que me parece un tanto extraño, ya que esperaría que el valor predeterminado fuera centrarlo verticalmente. ¿Cómo puedo centrarlo verticalmente, o hay alguna configuración predeterminada que me falta?


Esto funciona bien para texto textField. Pero si desea utilizar texto de marcador de posición (un texto que aparecerá mientras el campo de texto está en blanco), en iOS 7 encontrará problemas.

Lo resolví anulando la clase TextField y

- (void) drawPlaceholderInRect:(CGRect)rect

método.

Me gusta esto:

- (void) drawPlaceholderInRect:(CGRect)rect { [[UIColor blueColor] setFill]; CGRect placeholderRect = CGRectMake(rect.origin.x, (rect.size.height- self.font.pointSize)/2, rect.size.width, self.font.pointSize); [[self placeholder] drawInRect:placeholderRect withFont:self.font lineBreakMode:NSLineBreakByWordWrapping alignment:self.textAlignment]; }

Funciona tanto para iOS7 como para versiones anteriores.


Esto tiene potencialmente varios factores complicados, algunos aludidos en respuestas anteriores:

  • Lo que intenta alinear (solo números, solo letras, solo letras mayúsculas o una combinación)
  • Placeholders
  • Botón Borrar

Lo que estás tratando de alinear es importante porque el punto de la fuente debe estar centrado verticalmente debido a la altura de la línea, los ascendentes, los descensores, etc.
características de fuente vertical http://cdn.ilovetypography.com/img/vert-metrics/gxNh-minion.png
(Imagen gracias a http://ilovetypography.com/2009/01/14/inconspicuous-vertical-metrics/ )

Cuando se trata solo de números, por ejemplo, la alineación central estándar no se verá del todo bien. Compare la diferencia en los dos a continuación, que utilizan la misma alineación (en el código a continuación), uno de los cuales parece correcto y el otro que se ve un poco apagado:

No del todo bien con una combinación de letras:

pero se ve bien si solo son números

Por lo tanto, desafortunadamente, puede necesitar un poco de prueba y error y un ajuste manual para que se vea visualmente correcto.

Coloqué el siguiente código en una subclase de UITextField. Llama a los métodos de superclase ya que esto tiene en cuenta que el botón claro está presente.

override func awakeFromNib() { contentVerticalAlignment = UIControlContentVerticalAlignment.Center } override func textRectForBounds(bounds: CGRect) -> CGRect { let boundsWithClear = super.textRectForBounds(bounds) let delta = CGFloat(1) return CGRect(x: boundsWithClear.minX, y: delta, width: boundsWithClear.width, height: boundsWithClear.height - delta/2) } override func editingRectForBounds(bounds: CGRect) -> CGRect { let boundsWithClear = super.editingRectForBounds(bounds) let delta = CGFloat(1) return CGRect(x: boundsWithClear.minX, y: delta, width: boundsWithClear.width, height: boundsWithClear.height - delta/2) } override func placeholderRectForBounds(bounds: CGRect) -> CGRect { let delta = CGFloat(1) return CGRect(x: bounds.minX, y: delta, width: bounds.width, height: bounds.height - delta/2) }


textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;

En uso rápido:

textField.contentVerticalAlignment = UIControlContentVerticalAlignment.center