iOS 7 BUG - NSAttributedString n'apparaît pas
La semaine dernière, j'ai posé une question à propos d'un Simulateur de bug avec NSAttributedString pas l'affichage: iOS 7 Simulateur de Bug - NSAttributedString n'apparaît pas
Malheureusement, il apparaît maintenant, ce n'est pas un simulateur de bug, mais une version d'iOS 7 bug. J'ai maintenant reproduire ce problème sur un iPhone 5 appareil.
Le bug semble être la combinaison de l'utilisation NSUnderlineStyleAttributeName & NSParagraphStyleAttributeName comme attributs d'un NSAttributedString.
Je ne l'ai testé sur les deux iOS 7 appareils de mesure, et la question a seulement apparu sur l'un d'eux. Même après qu'ils ont tous les deux été mis à niveau vers la même version exacte:
-
Le 1er iPhone 5 avec iOS 7.0 (11A465): le Texte n'apparaît PAS
-
Le 1er iPhone 5 après la mise à jour 7.0.2 (11A501): le Texte n'apparaît PAS
-
2e iPhone 5 sous iOS 7.0 (11A4449d): le Texte s'affiche correctement
-
2e iPhone 5 après la mise à jour 7.0.2 (11A501): le Texte n'apparaît PAS
Il semble donc qu'Apple a présenté ce bug après iOS 7.0 (11A4449d). J'ai déposé un bug avec eux et vous mettre à jour sur toutes les réponse que je reçois.
Étapes pour reproduire le bug
Si vous êtes sous iOS 7.0.2, alors vous devriez être en mesure de reproduire ce bug.
Télécharger et exécuter ce projet sur votre appareil https://github.com/rohinnz/iOS-7-BUG---NSAttributedString-does-not-appear
ou
1) Dans Xcode 5 créer une nouvelle "Vue Unique Application". Appelez cela comme.
2) Dans Le ViewController.m, remplacer la méthode viewDidLoad avec:
- (void)viewDidLoad
{
[super viewDidLoad];
NSMutableParagraphStyle* paragraph = [[NSMutableParagraphStyle alloc] init];
paragraph.alignment = NSTextAlignmentCenter;
NSAttributedString* attrStr = [[NSAttributedString alloc] initWithString:@"Lorem ipsum dolor sit" attributes:
@{NSUnderlineStyleAttributeName:@(NSUnderlineStyleSingle),
NSParagraphStyleAttributeName:paragraph}];
UILabel* myLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 30, 0, 0)];
myLabel.backgroundColor = [UIColor greenColor];
myLabel.attributedText = attrStr;
[myLabel sizeToFit];
[self.view addSubview:myLabel];
}
3) Compiler et l'exécuter sur votre appareil. Selon votre version d'iOS 7, le texte de l'affichage, ou ne sera pas. Le UILabel la couleur d'arrière-plan s'affiche dans les deux cas.
Captures d'écran
iPhone 5 avec iOS 7.0 (11A465)
iPhone 5 avec iOS 7.0 (11A4449d)
Ma Question
Quelqu'un est-il capable de reproduire ce problème sur un appareil?
- Vous pouvez créer un minimum de projet qui illustre le bug, l'héberger sur github ou quelque chose, et d'ouvrir un rapport de bogue sur developer.apple.com/bug-reporting , en pointant sur le github du projet dans le rapport de bogue.
- Bonne idée, je vais le télécharger quelque chose à github bientôt. J'ai déjà déposé un bug avec Apple, mais je ne suis pas attendent à une réponse de sitôt, car ils n'ont pas encore obtenu de nouveau à moi sur un autre iOS 7 bug que j'ai élevé avec eux il ya un moment.
- j'ai trouvé des résultats similaires en utilisant backgroundcolor sur attribuée texte et le redimensionnement de la uilabel lors de la rotation de l'appareil. si je n'utilise pas backgroundcolor everythign fonctionne très bien. avec backgroundcolor après une modification de la largeur du texte disparaît. sur la rotation en arrière à l'original, le texte s'affiche de nouveau.
UILabel
est juste buggy.NSTextAttachments
sont également à l'origine des lignes de texte à disparaître, mais inversement proportionnelle à l'étiquette de la hauteur. Voir cette question: stackoverflow.com/q/19253224/1580288- Je pense que mon deuxième solution, où vous laissez l'étiquette redimensionner sa propre hauteur, est totalement fiable solution pour ce problème.
- Essayez de nouveau avec iOS 7.1. Ce bug peut être résolu.
- Avez-vous signalé ce bug ? J'ai rencontrer le même problème.
- Si le texte est très grand, alors vous devez utiliser UITextView avec le défilement est activé et modifiable/sélectionné désactivé (au lieu de UIScrollView & affichage du Contenu & UILabel).
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé une solution pour contourner ce bug. Dans votre github le code, utiliser la solution de contournement, vous dirais ceci:
J'ai apporté deux modifications: j'ai ajouté un caractère de saut de ligne à votre chaîne d'origine, et j'ai mis l'étiquette de
numberOfLines
à 2.Ce que la solution de contournement n'est de forcer le texte de l'étiquette vers le haut contre le haut de l'étiquette. Cela semble résoudre le problème. En d'autres termes, le bug semble provenir de l'étiquette, à la verticale du centre de son texte; si vous avez délibérément de rendre le texte trop long pour la taille de l'étiquette, de jongler avec les étiquettes de la hauteur,
numberOfLines
, et l'excès de caractères de saut de ligne à la fin du texte, attribué chaîne sera établi.MODIFIER je viens de trouver une autre solution de contournement dans le même sens: laisser l'étiquette redimensionne en fonction du texte. Voir mon code et l'explication ici: https://stackoverflow.com/a/19545193/341994 Dans ce code, je fais la même chose à partir de l'extrémité opposée, comme il a été: je donne l'étiquette de largeur fixe contrainte, mais d'un flexible de la hauteur de la contrainte, et en définissant sa propre hauteur, le label apporte le haut de son texte contre le haut de lui-même, et est donc en mesure d'afficher correctement le texte. En d'autres mots, c'est juste une autre façon de prévenir l'étiquette de centrage son texte à la verticale, ce qui semble déclencher le bug.
MODIFIER j'ai le sentiment que ce bug peut obtenir fixe dans iOS 7.1.
numberOfLines
de 2 a résolu le problème. Passé près de 2 heures à essayer de trouver si il y avait mon erreur avant de googlé le problème. Merci.J'ai également eu le même problème lors de la configuration de la couleur de fond sur le texte d'un UILabel dans un UITableViewCell. Ma solution a été d'utiliser un UITextView avec UserInteraction handicapés au lieu d'un UILabel dans la cellule et cela a fonctionné.
Mise à jour: Trouvé le problème, n'apparaissant avec UILabel inclus dans la Base de UITableViewCell.
Mise à jour 2: Également constaté que le problème ne se produit pas lorsqu'un UILabel revient à plusieurs lignes de texte. Une solution de contournement est de forcer le texte à envelopper par l'ajout d'un saut de ligne et d'espace. Très hacky, mais il fonctionne. Assurez-vous que numberOfLines est à zéro et lineBreakMode est fixé à NSLineBreakByWordWrapping.
J'ai eu le même problème dans mon application. Il s'est produit dans les simulateurs, ainsi que sur mon appareil (iPhone 5 running 7.0.2 (11A501)). J'ai alors réalisé que ma UILabels vivant dans d'autres ViewControllers ont été l'affichage des NSAttributedStrings à l'aide de la NSUnderlineStyleSingle attribut correctement.
Après un dépannage. Il semble que si vous êtes à l'aide de la police par défaut (je suis en utilisant le Système de 17,0) et de votre UILabel a une hauteur de moins de 62 pixels, il affiche correctement indépendamment de ce que la couleur de fond, couleur du texte, ou l'alignement que vous utilisez. Un changement de la UILabel de la hauteur d'une valeur supérieure à 61 pixels, permettant de dimensionnement automatique pour modifier la hauteur pour vous, ou un changement de la police à une Coutume entraînera la disparition de l'a souligné NSAttributedText.
Au début, je pensais que ce problème pourrait être dû à mon positionnement de la UILabel derrière la nouvelle Barre d'État (ou son absence), mais même dans des positions qui interagissent avec cette nouvelle fonctionnalité, la hauteur de la règle de toujours détenus. J'ai du mal à croire que la hauteur de la UILabel serait la cause d'une telle question, mais c'est la conclusion que je suis venu à.
Wow, m'a fallu un certain temps pour trouver cet. Regarde comme je vais avoir un problème similaire, comme l'Indi. Réglage de la couleur d'arrière-plan d'une attribuées chaîne causé le texte de disparaître. Seul endroit où je peux reproduire ce est sur un appareil iOS 7.0.3.
solution: utiliser une image vue
J'ai remarqué que ce problème se produise d'une manière similaire, mais a terminé avec une solution différente. La chaîne aurait parfois à disparaître, tandis que la solution proposée ci-dessus a aidé à s'assurer que le texte n'a pas disparu, le texte se révèlent souvent sans aucun des attributs que j'avais mis (biffures, de différentes couleurs, etc.)
Voici la configuration:
Un projet de l'héritage à l'aide de ressorts et les jambes de force d'être construit à l'aide de Xcode 6.1.1 et SDK iOS 8.1. Le problème était de plus en plus perceptibles sur les iPad par rapport à l'iPhone (~ 5% du temps sur les iPhones vs 95% de l'ipad). Peu importe si j'ai utilisé
numberOfLines
,sizeToFit
ou d'autres méthodes, les attributs peuvent ne pas s'afficher correctement sur un iPad ou un iPhone à 100% du temps.La solution a été de passer à la Mise en page Automatique et d'employer la solution ci-dessus (
numberOfLines = 2
,sizeToFit
semblait facultatif pour ma situation)Il semblerait qu'il y ait un bug avec Attribuée Texte sur
UILabels
avec les Ressorts et les jambes de force quand ils deviennent tendus à l'horizontale.Espère que cela aide quelqu'un!
j'ai eu ce problème aussi et il coutures de manifester uniquement sur les langues et sur iOS 7.0 , j'ai eu ce problème quand je veux souligner le texte en chinois, a résolu le problème avec [ label sizeToFit] espère que ça va aider 😉
Constantin.