J'essaie d'afficher une longue partie de texte à l'intérieur d'un UILabel sur une seule ligne. L'UILabel est une sous-vue d'UIScrollView afin que je puisse faire défiler et voir l'intégralité de l'UILabel.
Mon problème est que la méthode sizeToFit ne fonctionne que partiellement.
textLabel.attributedText = attributedString;
textLabel.numberOfLines = 1;
[textLabel sizeToFit];
textScrollView.contentSize = CGSizeMake(textLabel.frame.size.width, textLabel.frame.size.height);
La taille du contenu UIScrollView est suffisamment grande pour afficher l'intégralité de UILable, mais pour une ligne comme:
je vais donc essayer de partager certains d'entre eux ici de temps en temps. "
L'UILabel montre:
donc je vais essayer de partager som ...
Qu'est-ce que je fais mal?
Il s'avère que le code est très bien - mais la mise en page automatique a été vérifiée. Décoché - tout fonctionne très bien ...
Si vous souhaitez y parvenir avec la mise en page automatique activée, c'est simple. Assurez-vous simplement d'ajouter numberOfLines
textLabel.adjustsFontSizeToFitWidth = YES;
textLabel.numberOfLines = 0;
Étonnamment, si vous n'avez pas imposé de contrainte sur la largeur de l'étiquette, cela fonctionnerait:
[textLabel.superview layoutSubviews];
J'ai appris cela par essais et erreurs.
essayer
textLabel.adjustsFontSizeToFitWidth = YES;
textLabel.minimumFontScale = 0.5;
La raison la plus courante pour laquelle sizeToFit
ne fonctionne pas correctement est que UILabel
n'a pas de contraintes de mise en page automatique, par exemple si vous comptez implicitement sur la position d'affichage restant fixe par rapport au coin supérieur gauche. L'ajout de toute contrainte (leader, top, centerY, n'importe quoi) le corrigera, probablement parce que cela entraînera l'appel de layoutSubviews
à un moment donné, comme suggéré dans la réponse de Maxthon Chan.
Étant donné que vous avez limité votre étiquette pour afficher une seule ligne de texte et tronquer le reste, il se comporte de la même manière
textLabel.attributedText = attributedString;
textLabel.numberOfLines = 0;
[textLabel sizeToFit];
textLabel.lineBreakMode = NSLineBreakByWordWrapping;
textScrollView.contentSize = CGSizeMake(textLabel.frame.size.width, textLabel.frame.size.height);
J'espère que cela vous aidera