Je crée un UITextField par programme et le place dans un UIView. La taille de la police est définie sur 15.0f (police système). Mais l'espace réservé qui apparaît n'est pas centré dans la vue du texte. Quelqu'un sait comment résoudre ceci?
J'ai trouvé des références sur SO pour le texte flou, etc. et j'ai essayé de définir le cadre du champ de texte avec des valeurs entières, mais cela ne fait aucune différence.
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];
Merci pour toute aide
Note: Je veux dire que le texte n'est pas centré verticalement dans le champ de texte (il est un peu vers le haut). Donc, définir l'alignement du texte n'est pas la solution.
Ajout d’une image du problème à des fins de clarification - comme le montre l’image, le texte d’espace réservé est placé vers le haut et non au centre verticalement .
Vous devez ajouter:
txtField.textAlignment = NSTextAlignmentCenter; // Pre-iOS6 SDK: UITextAlignmentCenter
N'oubliez pas que ceci ajuste à la fois l'alignement du texte de substitution et celui que l'utilisateur entrera.
Comment centrer verticalement
Puisque la question initiale a été mise à jour pour demander comment aligner verticalement le texte de substitution et que cette réponse est enterrée dans les commentaires, voici comment procéder:
txtField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
Cela ne fonctionne pas comme prévu sur iOS7. Sur iOS7, vous devrez remplacer la classe TextField et
- (void) drawPlaceholderInRect:(CGRect)rect
méthode.
Comme ça:
- (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];
}
Fonctionne pour iOS7 et les versions antérieures.
J'utilisais juste la couleur, mais nous devons également définir la police.
Celui-ci a fonctionné pour moi:
[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setDefaultTextAttributes:
@{
NSForegroundColorAttributeName:[UIColor whiteColor],
NSFontAttributeName: [UIFont systemFontOfSize:12]
}];
Changer la hauteur de ligne minimale en utilisant NSParagraphStyle
était la seule solution qui fonctionnait pour moi:
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
}];