iphone - pantalla - El texto del marcador de posición no está centrado para UITextField creado mediante programación
itunes (4)
Cambiar la altura de línea mínima usando NSParagraphStyle
fue la única solución que funcionó para mí:
NSMutableParagraphStyle *style = [self.addressBar.defaultTextAttributes[NSParagraphStyleAttributeName] mutableCopy];
style.minimumLineHeight = self.addressBar.font.lineHeight - (self.addressBar.font.lineHeight - placeholderFont.lineHeight) / 2.0;
self.addressBar.attributedPlaceholder = [[NSAttributedString alloc] initWithString:@"Placeholder text" attributes:@{
NSForegroundColorAttributeName: [UIColor colorWithRed:79/255.0f green:79/255.0f blue:79/255.0f alpha:0.5f],
NSFontAttributeName : placeholderFont,
NSParagraphStyleAttributeName : style
}];
Estoy creando un UITextField programáticamente y lo coloco dentro de una UIView. El tamaño de fuente se establece en 15.0f (fuente del sistema). Pero el marcador de posición que aparece no está centrado en la vista de texto. ¿Alguien sabe como resolver esto?
Encontré algunas referencias en SO para texto borroso, etc. e intenté establecer el marco del campo de texto con valores enteros, pero no hay diferencia.
UITextField *txtField = [[UITextField alloc] initWithFrame:CGRectMake(5.0f, 6.0f, 278.0f, 32.0f)];
[txtField setPlaceholder:@"My placeholder"];
[txtField setFont:[UIFont systemFontOfSize:15.0]];
[txtField setBorderStyle:UITextBorderStyleRoundedRect];
[txtField setAutocorrectionType:UITextAutocorrectionTypeNo];
[txtField setAutocapitalizationType:UITextAutocapitalizationTypeNone];
[txtField setKeyboardType:UIKeyboardTypeEmailAddress];
[txtField setReturnKeyType:UIReturnKeyDone];
[txtField setClearButtonMode:UITextFieldViewModeWhileEditing];
Gracias por cualquier ayuda
Nota: quiero decir que el texto no está centrado verticalmente en el campo de texto (está un poco hacia arriba). Por lo tanto, establecer la alineación del texto no es la solución.
Agregando una imagen del problema para aclarar, como se ve en la imagen, el texto del marcador de posición es más hacia la parte superior y no en el centro verticalmente.
Estaba usando solo el color, pero también necesitamos configurar la fuente.
Este me funcionó:
[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setDefaultTextAttributes:
@{
NSForegroundColorAttributeName:[UIColor whiteColor],
NSFontAttributeName: [UIFont systemFontOfSize:12]
}];
Esto no funciona como se espera en iOS7. En iOS7, tendrá que anular 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 para iOS7 y versiones anteriores.
Necesitas agregar:
txtField.textAlignment = NSTextAlignmentCenter; // Pre-iOS6 SDK: UITextAlignmentCenter
Tenga en cuenta que esto ajusta tanto la alineación del texto del marcador de posición como el texto que ingresará el usuario.
Cómo centrarse verticalmente
Dado que la pregunta original se actualizó para solicitar cómo alinear verticalmente el texto del marcador de posición y esa respuesta está oculta en los comentarios, aquí se explica cómo hacerlo:
txtField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;