Question

J'ajustais mes anciennes applications pour iPhone 4 en utilisant le simulateur au moment et je peux à travers un comportement très étrange avec UILabel dessin et sizeWithFont: constrainedToSize:. Que je vois actuellement que sur le simulateur iPhone 4

Je suis en train de montrer le texte d'erreur suivant à l'utilisateur: @"Identifiant ou mot de passe incorrect" Ce texte se trouve à l'intérieur d'une boîte d'erreur dynamique qui est construit à partir de trois parties:. Haut, au centre et en bas et donc je calculer la taille de l'étiquette de sorte que je peux changer la trame d'image d'arrière-plan en conséquence centre

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 l'iPhone 3 simulateur du sizeWithFont: constrainedToSize: méthode retourne une hauteur de 1 ligne et dessine ce texte d'erreur sur 1 ligne. Quand je lance le même code sur le simulateur iPhone 4 sizeWithFont: constrainedToSize: retourne une taille de (170,0, 42,0) qui est nécessaire pour deux lignes, mais étiquette elle-même est tirée sur une ligne. Il est comme si le code sizeWithFont n'utilise pas les mêmes logiques du code de rendu.

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

Merci à l'avance

Était-ce utile?

La solution

J'ai le même problème, avec la même police. Je ne l'ai pas trouvé un moyen de prédire quand cela se produira, et il semble être jamais plus précisément une supplémentaire de ligne. Il arrive sur l'appareil exactement comme sur le simulateur. Il arrive dans tous les iOS 4.0, 4.0.1 et 4.0.2. Je n'ai pas vérifié encore sur le simulateur 4.1.

Finalement, j'ai contourné en notant manuellement les endroits elle a été commise et en soustrayant une hauteur de ligne dans ces endroits. Lorsque nous améliorons à 4.1, nous allons vérifier pour voir si ce comportement persiste.

Autres conseils

Je remarque cette question. A également remarqué que lors de l'utilisation de l'iPhone 4, un espace vide qui est inclus dans une chaîne de texte est calculé comme 4 pts large, mais si vous calculez la largeur d'un espace vide par lui-même, il est calculé comme 5pts large .... ( en utilisant ArialMT, 14pt)

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top