102 votes

Ensemble UILabel l'espacement des lignes

Comment puis-je modifier l'écart entre les lignes dans une multiligne UILabel?

122voto

AndrewS Points 3208

Edit: de toute Évidence NSAttributedString va le faire, sur iOS 6 et versions ultérieures. Au lieu d'utiliser un NSString pour définir le texte de l'étiquette, de créer un NSAttributedString, définissez les attributs sur elle, puis le définir comme l' .attributedText sur l'étiquette. Le code que vous voulez être quelque chose comme ceci:

NSMutableAttributedString* attrString = [NSMutableAttributedString attributedStringWithString:@"Sample text"];
NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
[style setLineSpacing:24];
[attrString addAttribute:NSParagraphStyleAttributeName
    value:style
    range:NSMakeRange(0, strLength)];
uiLabel.attributedText = attrString;

Pour des raisons historiques, voici ma réponse:

Réponse courte: vous ne pouvez pas. Pour modifier l'espacement entre les lignes de texte, vous aurez à la sous-classe UILabel et rouler vos propres drawTextInRect, de créer de multiples étiquettes, ou utiliser une police différente (peut-être modifié pour une ligne de hauteur, voir Philippe de réponse).

Réponse longue: Dans la presse écrite et en ligne du monde, de l'espace entre les lignes de texte qui est connu comme "chef de file" (qui rime avec "titre", et vient de la tête métal utilisé depuis des décennies). Leader est une propriété en lecture seule de UIFont, qui a été dépréciée en 4.0 et remplacé par lineHeight. Autant que je sache, il n'y a aucun moyen de créer une police avec un ensemble de paramètres spécifiques tels que lineHeight; vous obtenez le système de polices et de toute police personnalisée vous permet d'ajouter, mais ne peut pas les modifier une fois installé.

Il n'y a pas de paramètre espacement dans UILabel, soit.

Je ne suis pas particulièrement heureux avec UILabel du comportement comme l'est, ainsi, je propose de rédiger votre propre sous-classe ou à l'aide d'un 3e partie de la bibliothèque. Que fera le comportement indépendant de votre le choix de la police et de la plus réutilisable solution.

Je souhaite qu'il n'y a plus de flexibilité dans la UILabel, et je serais heureux d'avoir tort!

75voto

Shady Points 1254

Départ dans ios 6, vous pouvez définir une attribuées chaîne dans le UILabel:

NSString *labelText = @"some text"; 
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:labelText];
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
[paragraphStyle setLineSpacing:40];
[attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [labelText length])];
cell.label.attributedText = attributedString ;

16voto

Philippe Points 1633

Ma solution a été de patcher le fichier de police lui-même et fixer sa ligne de hauteur certainement. http://mbauman.net/geek/2009/03/15/minor-truetype-font-editing-on-a-mac/

J'ai dû modifier 'lineGap', 'montante', 'descendante' dans le 'hhea" en bloc (comme dans le blog exemple).

8voto

Grsmto Points 1357

Ce mec a créé une classe pour obtenir la hauteur de la ligne (sans l'aide de CoreText, comme MTLabel de la bibliothèque) : https://github.com/LemonCake/MSLabel

7voto

lms Points 3240

La meilleure chose que j'ai trouvé est: https://github.com/mattt/TTTAttributedLabel

C'est un UILabel sous-classe de sorte que vous pouvez déposer dans, puis de modifier la hauteur de la ligne:

myLabel.lineHeightMultiple = 0.85;
myLabel.leading = 2;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X