Comment puis-je modifier l'écart entre les lignes dans une multiligne UILabel
?
Réponses
Trop de publicités?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!
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 ;
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).
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
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;