Je travaille sur une application iOS à l'aide de l'objectif C et j'ai un problème avec Uilabel que je pourrais utiliser de l'aide. Fondamentalement, j'ai une étiquette qui peut changer de taille pour s'adapter au texte qu'il affichera, mais il a une hauteur maximale qu'elle peut être possible. L'étiquette elle-même a une largeur fixe à tout moment. J'ai allumé UilinebreakModewordwordwrap et UilineBreakModetailtruncation pour que le texte ajuster et tronquer, mais cela provoque la tronquée du texte trop tôt quand il n'a laissé que 1 mot. Plutôt ensuite le déplaçant sur la ligne suivante quand il y a encore de la pièce, il ne le tronque pas. est là de la recherche lorsque l'Uilabel tronque réellement le texte afin que je puisse vérifier la hauteur de l'étiquette afin que je puisse vérifier la hauteur de l'étiquette. et ajoutez-vous s'il y a encore une place? J'ai essayé toujours d'ajouter une ligne supplémentaire à la hauteur quand il y a de la place et cela évite la troncature précoce, mais je suis alors laissé avec un dimensionnement incohérent de la plus grande étiquette. Toute idées sur ce serait bien merci p> p>
4 Réponses :
Utilisation de cette méthode: p>
Comment trouver le nombre de lignes d'Uilabel P>
Vous pouvez régler l'étiquette sur la hauteur maximale, découvrez la taille du texte dans cette étiquette et la rétrécissez si nécessaire. P>
Mais, pour répondre à votre question, vous pouvez trouver la taille d'un texte à l'aide des extensions de classe dans LinebreakMode code> est un commutateur. Il peut être em> (pour iOS6 +)
nslinebrebreakbywordwordwout code> ou
nslinebrebrebreakbytrunc. / code> mais pas tous les deux. P>
NSString + Uikit Code>
. Après avoir trouvé la taille, vous pouvez mettre à jour le cadre du uilabel code> de manière appropriée. P>
fini par obtenir la taille qu'il s'agirait du lien que vous avez fourni (tailleWithfont :) puis définissez la ligneBreakMode sur WordWrap ou la tronc de la queue en fonction de la max ou non, puis utilisée sizetofit et a fonctionné très bien merci.
Nice conseil sur cette catégorie. Ne savait pas qu'il existait avant.
J'ai écrit une catégorie pour travailler avec la troncature d'Uilabel. Fonctionne sur iOS 7 et plus tard. J'espère que cela aide!
@implementation UILabel (Truncation) - (NSRange)truncatedRange { NSTextStorage *textStorage = [[NSTextStorage alloc] initWithAttributedString:[self attributedText]]; NSLayoutManager *layoutManager = [[NSLayoutManager alloc] init]; [textStorage addLayoutManager:layoutManager]; NSTextContainer *textContainer = [[NSTextContainer alloc] initWithSize:[self bounds].size]; textContainer.lineFragmentPadding = 0; [layoutManager addTextContainer:textContainer]; NSRange truncatedrange = [layoutManager truncatedGlyphRangeInLineFragmentForGlyphAtIndex:0]; return truncatedrange; } - (BOOL)isTruncated { return [self truncatedRange].location != NSNotFound; } - (NSString *)truncatedText { NSRange truncatedrange = [self truncatedRange]; if (truncatedrange.location != NSNotFound) { return [self.text substringWithRange:truncatedrange]; } return nil; } @end
Je viens juste d'arriver à un problème similaire et je l'ai résolu avec une solution très simple (testée sur iOS 8.4, Xcode 7).
in ib (j'utilise autolayouout avec certaines contraintes): P>
label.numberOfLines = 2; // I can only display 2 row. // I supposed you should know how many rows you can displayed. label.preferredMaxLayoutWidth = label.frame.size.width; [label sizeToFit];
+1 Attribut "PreferredredMaxLayOutwidth". J'ai un autre cas de Topicstarter, mais cet attribut a résolu mon problème.