2010-08-23 4 views
1

J'adapte mes anciennes applications à l'iPhone 4 en utilisant le simulateur en ce moment et je peux traverser un comportement très étrange avec UILabel drawing et sizeWithFont: constrainedToSize: que je ne vois actuellement que sur le simulateur de l'iPhone 4 .UILajouter les mauvais calculs de taille sur l'iPhone

Je suis en train de montrer le texte d'erreur suivant à l'utilisateur: @ « nom d'utilisateur incorrect ou mot de passe » Ce texte se trouve dans une zone d'erreur dynamique qui est construit à partir de trois parties: en haut, centre et bas et donc je calculer la taille de l'étiquette afin que je puisse changer le cadre de l'image d'arrière-plan du centre en conséquence.

Voici un exemple du code de calcul de la taille UILabel:

CGRect errorFrame = CGRectMake(40, 0, 240.0, 22.0); 
UILabel *errorlabel = [[UILabel alloc] initWithFrame:errorFrame]; 
errorlabel.adjustsFontSizeToFitWidth = NO; 
errorlabel.font = [UIFont fontWithName:@"HelveticaNeue" size:16]; 
errorlabel.textAlignment = UITextAlignmentLeft; 
errorlabel.numberOfLines = 0; 
errorlabel.text = @"Incorrect user name or password"; 
// since only the width is fixed I will use a really large height value 
CGSize errorLabelSize = [errorlabel.text sizeWithFont:errorlabel.font constrainedToSize:CGSizeMake(240.0, 4600.0)]; 
CGRect newFrame = errorlabel.frame; 
newFrame.size.height = errorLabelSize.height; 
errorlabel.frame = newFrame; 
    // added so I can easily see the new frame 
errorlabel.backgroundColor = [UIColor redColor]; 
[self.errorView addSubview:errorlabel]; 
[errorlabel release]; 

Quand je lance le code sur le simulateur iPhone 3 du sizeWithFont: constrainedToSize: méthode retourne une hauteur de 1 ligne et dessine ce texte d'erreur 1 ligne. Lorsque je lance le même code sur le simulateur de l'iPhone 4 sizeWithFont: constrainedToSize: retourne une taille de (170.0, 42.0) qui est nécessaire pour deux lignes mais l'étiquette elle-même est dessinée sur 1 ligne. C'est comme si le code sizeWithFont n'utilisait pas les mêmes logiques du code de rendu.

Depuis la modification du texte d'erreur n'est pas une option :) une idée de comment contourner ce problème ou le résoudre?

Merci à l'avance

Répondre

0

J'ai ce même problème, avec la même police. Je n'ai pas trouvé un moyen de prédire quand cela se produira, et il ne semble jamais y avoir plus d'une ligne de plus. Cela se passe sur l'appareil exactement comme sur le simulateur. Cela arrive dans tous les iOS 4.0, 4.0.1 et 4.0.2. Je n'ai pas encore vérifié sur le simulateur 4.1. Finalement, j'ai travaillé autour en notant manuellement les endroits où il s'est produit et en soustrayant une hauteur de ligne à ces endroits. Lorsque nous passerons à la version 4.1, nous vérifierons si ce comportement a persisté.

0

J'ai remarqué ce problème. Notez également que lorsque vous utilisez l'iPhone 4, un espace vide qui est inclus dans une chaîne de texte est calculé comme 4 pts de large, mais si vous calculez la largeur d'un espace vide par lui-même, il est calculé comme 5pts de large .... en utilisant ArialMT, 14pt)

0

Après avoir soumis ce bug à Apple environ un an il y a je reçu un courriel de leur disant que le problème devrait être résolu sur iOS5 beta 1

+0

ne marche pas semblent être résolus pour moi de toute façon – glogic