Simplemente estoy instanciando un UITextField
y me doy cuenta de que el texto no se centra verticalmente. En cambio, está alineado con la parte superior de mi botón, lo que me parece un poco extraño ya que esperaría que el valor predeterminado se centrara verticalmente. ¿Cómo puedo centrarlo verticalmente, o hay alguna configuración predeterminada que me falta?¿Cómo centro verticalmente el texto de UITextField?
Respuesta
textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
En uso rápida:
textField.contentVerticalAlignment = UIControlContentVerticalAlignment.center
Esto funciona bien para el texto de 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 resuelto por razones imperiosas de clase TextField y
- (void) drawPlaceholderInRect:(CGRect)rect
método.
De esta manera:
- (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 y versiones anteriores.
¿Cómo manejas eso en Swift? Porque self.placeholder.drawInRect no existe en Swift. –
esto funciona, pero self.font.pointSize parece funcionar un poco mejor que pointSize –
En el guión gráfico: Bajo control -> cambie la alineación vertical y horizontal, según sus necesidades.
Funcionó para mí. THanks –
Potencialmente, esto tiene varios factores que complican, algunos se alude en las respuestas anteriores:
- Lo que estamos tratando de alinear (sólo números, sólo letras mayúsculas, letras o simplemente una mezcla)
- marcadores de posición
- botón Borrar
Lo que estamos tratando de alinear es importante debido a qué punto de la fuente debe estar centrada verticalmente debido a la altura de la línea, los ascendentes, los descendentes etc.
vertical font characteristics http://cdn.ilovetypography.com/img/vert-metrics/gxNh-minion.png
(Imagen gracias a http://ilovetypography.com/2009/01/14/inconspicuous-vertical-metrics/)
Cuando' Al tratar con números simples, por ejemplo, la alineación central estándar no se verá del todo bien. Comparar la diferencia en el dos por debajo, que utilizan la misma alineación (en el código de abajo), uno de los cuales parece correcto y el otro que se parece un poco fuera:
No está muy bien con una mezcla de letras:
, pero se ve bien si es sólo 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)
}
Creo que el 'placeholderRectForBounds' se extiende demasiado a la derecha. Tengo una visión correcta y entra en ella a diferencia de los otros límites. Acabo de implementar 'textRectForBounds' y lo llamé desde los otros 2 funcs :) – Sasho
- 1. androide Spinner: Texto centro verticalmente dentro spinner
- 2. ¿Cómo alinear verticalmente el texto al centro en HTML?
- 3. verticalmente centro text-align
- 4. ¿Cómo centrar verticalmente el texto en un NSTextField?
- 5. ¿Cómo centro verticalmente el texto en el título de una etiqueta de Excel?
- 6. En Gtk, ¿cómo centro el texto dentro de un TextView verticalmente?
- 7. UITextField: Aumenta el tamaño y coloca el texto de entrada centrado verticalmente
- 8. ¿Cómo centro verticalmente una etiqueta en un div?
- 9. Cómo alinear verticalmente una posición en el centro: elemento relativo
- 10. Elementos del centro verticalmente en CSS
- 11. Texto central y multilínea li texto verticalmente
- 12. ¿Cómo alinear verticalmente un texto?
- 13. Colocando un UITextField en el centro de la vista
- 14. Cómo alinear verticalmente vanos con el texto y la imagen
- 15. Obtención de texto justificado en UITextField
- 16. Cómo centrar texto verticalmente con css
- 17. UITextField ¿texto en negrita?
- 18. UITextField texto borroso
- 19. ¿Ajustar texto en UITextField?
- 20. Dibujar texto en el centro
- 21. Delphi - Dibujar texto multilínea en el centro de una rect
- 22. Centro de texto, botón de Android
- 23. ¿Cómo alinear verticalmente 2 tamaños diferentes de texto?
- 24. UITextField comienza el texto desde arriba cuando aumenta la altura
- 25. Hacer un centro div de la vista - Horizontal y verticalmente
- 26. ¿Cómo obtengo el texto de UITextField en un NSString?
- 27. cómo hacer que el texto de UITextField esté seleccionado Prográficamente
- 28. ¿Cómo alinear verticalmente texto en tipo de entrada = "texto"?
- 29. ¿Cómo alinear verticalmente una imagen de tamaño desconocido al centro de un div?
- 30. Salida de texto del centro de Graphics.DrawString()
una buena idea para un valor por defecto .. –
(no funciona para mí) – user353877
@ user353877: Esto todavía funciona bien. Tenga en cuenta que en la respuesta de Roger, 'textField' es el nombre de su instancia' UITextField'; la suya puede ser diferente. Entonces tendrá algo como 'UITextField * textField = [[UITextField alloc] init];'. Si usa un nombre de variable diferente (cualquier cosa que no sea 'textField' después de' * '), debe hacer' yourDifferentVariableNameHere.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter' en su lugar. – GeneralMike