2011-07-08 3 views
4

J'utilise un OHAttributedLabel appelé demoLbl pour afficher du texte avec des zones formatées. Cette étiquette est présentée avec Interface Builder et est connectée à une propriété dans mon ViewController. Après avoir affecté le texte attributeText à l'étiquette, je veux que tout le texte soit affiché sur l'étiquette.
Si je ne redimensionne pas l'étiquette, le texte est rogné à la fin de l'étiquette, de sorte que le reste du texte est manquant.Comment faire de la hauteur de l'échelle OHAttributedLabel avec la hauteur du contenu?

Si j'utilise [demoLbl sizeToFit]; alors la hauteur de l'étiquette est plus grande ou plus petite que le texte (environ 10 points, variant avec la longueur du texte), ce qui me donne des zones vides au bas de ma vue (après défilement) plus la largeur de l'étiquette est augmentée de environ 2 points. Si je calcule la hauteur du texte d'origine (NSString) avant de le placer dans une chaîne NSAttributedString et de l'ajouter à la propriété attributeText du label, alors la hauteur calculée est trop petite pour la définir comme la hauteur du label.

Existe-t-il un bidouillage ou un truc que je peux appliquer pour que la hauteur de l'étiquette soit ajustée en fonction de la hauteur de la chaîne NSAttributedString? PS: Pour être plus précis, je voulais ajouter OHAttributedLabel en tant que balise, mais ce n'est pas encore autorisé pour moi.

Répondre

10

Je suis l'auteur de OHattributedLabel.

J'ai récemment corrigé mon calcul de la taille. S'il vous plaît vérifier, il va probablement résoudre votre problème.

J'ai aussi ajouté une méthode appelée sizeConstrainedToSize:fitRange: dans NSAttributedString+Attributes.h qui renvoie le CGSize d'un NSAttributedString donné (tout à fait la même sizeWithFont:constrainedToSize: de façon UIKit œuvres, mais pour les chaînes Attributed et CoreText et piqûres pas simples un UIKit) En fait sizeThatFits de OHAttributedLabel: appelle cela méthode elle-même maintenant.

+0

Malheureusement, je ne peux pas vérifier si vos modifications fonctionnent. J'ai été forcé d'abandonner l'utilisation de NSAttributedString en échange de l'utilisation d'un UIWebView avec du texte stylé. Peut être dans un projet futur je suis capable de le tester. Je vous contacterai si cela se produit. – TRD

1

Vous pouvez voir si cette catégorie vous donne une hauteur plus fiable. https://gist.github.com/1071565

Utilisation

attrLabel.frame.size.height = [attrLabel.attributedString boundingHeightForWidth:attrLabel.frame.size.width]; 
+0

Il semble que cette catégorie est sur le point de faire ce que je veux. Si j'imprime la hauteur de la chaîne NSAttributedString, elle me montre une valeur qui pourrait être correcte, mais si j'affecte cette hauteur à mon label, elle ne l'acceptera pas. C'est plus élevé qu'avant, mais pas aussi élevé que nécessaire pour afficher le texte. Étonnamment, l'impression de la hauteur de l'étiquette me montre la hauteur claculée et assignée de la chaîne NSAttributedString. Ne sachez pas où se trouve le mensonge. – TRD

1

J'ajouté ce code à la mise en œuvre de la classe OHAttributedLabel:

// Toni Soler - 02/09/2011 
// Overridden of the UILabel::sizeToFit method 
- (void)sizeToFit 
{ 
    // Do not call the standard method of the UILabel class, this resizes the frame incorrectly 
    //[super sizeToFit]; 

    CGSize constraint = CGSizeMake(self.frame.size.width, 20000.0f); 
    CGRect frame = self.frame; 
    frame.size = [self sizeThatFits:constraint]; 
    [self setFrame:frame]; 
} 
// End Toni Soler - 02/09/2011 

Merci Olivier pour partager votre code!

Questions connexes