2010-10-26 4 views
2

Je travaille sur une application iPhone/iPad universelle. Je redimensionne certains de mes UITextFields lorsque l'utilisateur tape. J'ai aussi du code pour déplacer les UITextFields afin que leurs emplacements aient du sens quand ils sont redimensionnés. Ce code n'est pas trop court, mais fondamentalement, il revient à modifier les cadres des UITextFields.iPad UITextField - le curseur ne se centre pas lors du redimensionnement de l'image avec contentVerticalAlignment = UIControlContentVerticalAlignmentCenter

Mes UITextFields ont tous leur contenu centré verticalement en mettant

textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; 

Les centres de texte très bien. Mais quand je redimensionne le champ de texte sur l'iPad, le curseur va parfois en haut de la boîte. Cela semble étrange pour l'utilisateur car le texte est au centre.

Cela arrive toujours sur l'iPad, jamais sur l'iPhone. Pire encore, je ne peux pas isoler quelle partie particulière du code le fait arriver - sauf que si j'arrête de redimensionner les choses, le problème disparaît.

Est-ce que quelqu'un d'autre a déjà rencontré cela? Avez-vous pu isoler la source du problème?

Merci.

Répondre

0

J'ai trouvé ce qui déclenche le bug. Cela se produit lorsque textField est redimensionné à la fois par layoutSubviews et par une méthode déclenchée par UIControlEventEditingChanged.

0

Pour un meilleur contrôle de l'alignement du texte du champ de texte, vous pouvez utiliser la sous-classe de UITextField où vous substituez les méthodes suivantes:

- (CGRect)textRectForBounds:(CGRect)bounds 
{ 
    CGRect rect = [super textRectForBounds:bounds]; 
    rect.origin.y = (bounds.size.height - rect.size.height)/2; 
    rect = CGRectInset(rect, 3.0f, 0.0f); 
    return rect; 
} 

- (CGRect)editingRectForBounds:(CGRect)bounds 
{ 
    CGRect rect = [super editingRectForBounds:bounds]; 
    rect.origin.y = (bounds.size.height - rect.size.height)/2; 
    rect = CGRectInset(rect, 3.0f, 0.0f); 
    return rect; 
} 

- (CGRect)placeholderRectForBounds:(CGRect)bounds 
{ 
    CGRect rect = [super placeholderRectForBounds:bounds]; 
    rect.origin.y = (bounds.size.height - rect.size.height)/2; 
    rect = CGRectInset(rect, 3.0f, 0.0f); 
    return rect; 
} 
Questions connexes