2011-08-22 4 views
14

J'ai un problème avec iOS qui utilise UILabel pour afficher du texte en 2,3 lignes, je veux aligner le texte comme justifié mais je ne trouve aucune option pour le faire. Des suggestions comment faire justifier le texte dans l'étiquette?Justifier le texte dans UILabel iOS

i mettre ces lignes pour faire démarrer du haut

CGSize maximumSize = CGSizeMake(300, 9999); 
NSString *textString = someString; 
UIFont *textFont = [UIFont fontWithName:@"Futura" size:14]; 
CGSize textStringSize = [textString sizeWithFont:textFont 
           constrainedToSize:maximumSize 
            lineBreakMode:text.lineBreakMode]; 

CGRect textFrame = CGRectMake(10, 110, 300, textStringSize.height); 
text.frame = textFrame; 

de sorte que toute astuce comme celui-ci pour le rendre justfiy Merci

Répondre

31

Il existe maintenant un moyen pratique de justifier le texte depuis iOS6. Vous pouvez créer une instance de NSAttributedString, définir des propriétés appropriées et attribuer cette chaîne attribué à un texte représentant vue tels que UILabel, UITextView, etc. Il est facile que cela:

  1. Créer une instance de NSMutableParagraphStyle et définir ses propriétés .

    NSMutableParagraphStyle *paragraphStyles = [[NSMutableParagraphStyle alloc] init]; 
    paragraphStyles.alignment = NSTextAlignmentJustified;  //justified text 
    paragraphStyles.firstLineHeadIndent = 10.0;    //must have a value to make it work 
    
  2. Créer NSDictionary pour les attributs de texte et de créer une chaîne attribuée.

    NSDictionary *attributes = @{NSParagraphStyleAttributeName: paragraphStyles}; 
    NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString: string attributes: attributes]; 
    
  3. Définir la chaîne attribuée à une étiquette.

    existingLabel.attributedText = attributedString; 
    
+1

"paragraphStyles.firstLineHeadIndent = 10.0" c'était ce que je cherche. Merci! – Neru

+0

Fonctionne comme un charme !! Merci! –

4

Ne peut pas être fait, j'ai peur - bien pas UILabel .

Vous pouvez utiliser le UIWebView ou une bibliothèque 3ème partie, comme OHAttributedLabel

Bonne programmation :)

Mise à jour:

Cette réponse est obsolète depuis iOS6. Veuillez vous référer à la réponse de Tankista.

+3

cette solution est maintenant obsolète, consultez ma réponse ci-dessous –

0

Cela peut être fait facilement, mais vous devez utiliser Core Text.

sous-classe un UIView, ajoutez une propriété NSString, créer un NSAttributedString et passer la valeur kCTJustifiedTextAlignment pour la clé kCTParagraphStyleSpecifierAlignment, puis tirez la NSAttributedString en utilisant Quartz ou CoreText dans votre méthode de drawRect.

modifier: kCTParagraphStyleSpecifierAlignment clé valeur kCTJustifiedTextAlignment doit être utilisé pour créer une struct CTParagraphStyleRef et transmis comme une valeur pour kCTParagraphStyleAttributeName clé lors de la création du NSAttributedString.

0

Comme mentionné par @martin, ma classe OHAttributedLabel peut le faire très facilement. (Vous le trouverez également sur mon github et vous y trouverez également de nombreuses références) SO

+1

Vous avez tout pour que dans le fichier d'en-tête, pas de problème pour faire tout cela. Il existe un '' '' UITextAlignmentJustify''' #define (qui équivaut '' '' kCTJustifiedTextAlignment''') que vous pouvez utiliser pour appliquer l'alignement du texte sur votre chaîne NSAttributedString (en utilisant la méthode '' 'setTextAlignment: lineBreakMode:' '' de NSAttributedString + Attributes .h).Et si vous ne voulez pas que les liens soient cliquables, il y a aussi un @property pour cela: '' 'automaticallyAddLinksForType = 0''' n'ajoutera aucun lien sur ni les URL, ni les téléphones, ni rien. – AliSoftware

+0

Depuis iOS6, il est préférable d'utiliser 'UILabel' natif avec' NSAttributedString'. –

+0

@ Cœur Tout à fait d'accord (c'est pourquoi 'OHAttributedLabel' est obsolète depuis quelque temps maintenant, BTW). Pour ceux que cela intéresse, j'ai extrait toutes les catégories manuelles NSAttributedString dans mon nouveau module [OHAttributedStringAdditions] (https://github.com/AliSoftware/OHAttributedStringAdditions) maintenant, ce qui vous aide à manipuler plus facilement les objets NS (Mutable) AttributedString' (et est compatible avec iOS6 + et TextKit). – AliSoftware