45 votes

Le texte dans UITextField monte après l'édition (au centre pendant l'édition)

J'ai un problème étrange. J'ai un UITextField dans lequel l'utilisateur doit écrire la quantité de quelque chose, de sorte que le champ est appelé "amountField". Tout semble parfait, lorsque l'utilisateur commence à modifier la zone de texte, le texte est dans le sens vertical et horizontal au centre - c'est très bien.

Cependant, lorsque l'utilisateur termine l'édition du texte se déplace un peu. J'ai essayé beaucoup de choses, rien n'y fait...

Je suis l'ajout de captures d'écran ci-dessous, vous pouvez voir quel est le problème.

C'est à quoi il ressemble quand vous modifiez le champ - c'est ok.

This is while editing the field - that's ok.

Et c'est à quoi il ressemble quand faire de l'édition - qui est le problème!

This is the problem.

S'il vous plaît, si quelqu'un sait quelle est la cause de cela, je serais très reconnaissant! :)

Ici est une partie de mon code en matière de amountField.

amountField.keyboardType = UIKeyboardTypeNumberPad;
amountField.returnKeyType = UIReturnKeyDone;
amountField.delegate = self;

[amountField setFont:[UIFont fontWithName:@"Nuptial Script LT Std" size:30]];   
amountField.borderStyle = UITextBorderStyleNone;
UIImage *amountBg = [UIImage imageNamed:@"skin2_ipad_amountField.png"];
[amountField setBackground:amountBg];

amountField.rightView = nil;
//amountField.backgroundColor = [UIColor colorWithRed:1 green:1 blue:1 alpha:0.2];

amountField.textAlignment = UITextAlignmentCenter;
amountField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
amountField.adjustsFontSizeToFitWidth = YES;
amountLabel.textColor = UIColorFromARGB(0x313030); //Using my own macro

amountField.frame = CGRectMake(300, 480, 136, 32);
amountField.center = CGPointMake(605, 439);

PS: Ceux-blanc coins sont là, car j'ai mis un arrière-plan blanc avec alpha 0.2, c'est ok.

23voto

Dominik Hadl Points 2106

Alors...

Après de nombreuses heures à essayer beaucoup de choses - j'ai trouvé le problème. Dans mon cas, le problème est la police. Je ne sais pas vraiment pourquoi, mais l'auteur de la fonte de la police de caractères bizarres (conduisant etc.), il a un espace vide sur le fond. Je ne sais pas pourquoi, mais quand vous modifiez le texte de toutes les propriétés de texte sont ignorés, mais après vous avez terminé d'éditer, elles sont appliquées.

Donc, si vous avez un problème similaire, essayez de changer la police de caractères Arial ou quelque chose de similaire.

Merci les gars pour vos efforts,

Dominik

2voto

GrizzlyNetch Points 1314

Je suis aux prises avec ce problème presque à chaque fois, lors de la conception de l'application est avec des polices personnalisées. Une option consiste à fixer la police de caractères (mais c'est trop de travail – au moins pour moi :) ). La deuxième option que j'utilise est sous-classement de l'objet UITextField et en remplaçant la editingRectForBounds: et placeholderRectForBounds: méthodes et de corriger le décalage. Il doit travailler pour votre cas aussi.

@implementation MyTextFieldWithFixedFontPosition

-(CGRect)editingRectForBounds:(CGRect)bounds{
    return CGRectOffset([self textRectForBounds:bounds], 0, 0.5); //0.5 is just example, you can adjust to any offset you like
}
-(CGRect)placeholderRectForBounds:(CGRect)bounds{
    return [self editingRectForBounds:bounds];
}

@end

Je n'ai pas tester avec leftView ou rightView bien, donc soyez prudent lors de l'utilisation de ceux-ci :)

0voto

Brian Palma Points 372

J'ai eu des problèmes similaires avec un UITextfield incorporé dans un UITableViewCell. Où est exactement ce code se trouve dans votre projet? Je crois que ce qui se passe est que, après vous avez terminé d'éditer un particulier textfield, il envoie lui-même -setNeedsDisplay et ses drawRect: est par la suite appelé. Ce qui pourrait expliquer le décalage dans l'alignement. Dans mon scénario, j'ai dû utiliser une vue de table délégué de la méthode willDisplayCell... pour définir le contenu de l'alignement. J'aurais pour en savoir plus au sujet de votre conception pour proposer éventuellement une suggestion.

Une solution possible serait d'utiliser le champ de texte délégué méthodes pour définir le contenu de l'alignement.

-(void)textFieldDidEndEditing:(UITextField *)textField{
     if (amountField == textField){
          amountField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
        }

0voto

Zak Arntson Points 71

Je ne pouvais pas modifier le fichier de police. Ainsi, lorsque j'ai résolu ce problème, j'ai enregistré le cadre original de UITextField dans une propriété et appliqué le code suivant:

 - (void)textFieldDidBeginEditing:(UITextField *)textField
{
    textField.frame = self.usernameFrame;
}

- (void)textFieldDidEndEditing:(UITextField *)textField
{
    textField.frame = CGRectOffset(self.usernameFrame, 0, 1);
}
 

C'est un peu hacky, mais ça fait le travail.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X