Comment puis-je modifier l'écart entre les lignes (interligne) dans une multiligne UILabel
?
la source
Comment puis-je modifier l'écart entre les lignes (interligne) dans une multiligne UILabel
?
Edit: Évidemment, le NSAttributedString
fera, sur iOS 6 et versions ultérieures. Au lieu d'utiliser un NSString
pour définir le texte de l'étiquette, créez un NSAttributedString
, définissez des attributs dessus, puis définissez-le comme .attributedText
sur l'étiquette. Le code que vous voulez sera quelque chose comme ceci:
NSMutableAttributedString* attrString = [[NSMutableAttributedString alloc] initWithString:@"Sample text"];
NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
[style setLineSpacing:24];
[attrString addAttribute:NSParagraphStyleAttributeName
value:style
range:NSMakeRange(0, strLength)];
uiLabel.attributedText = attrString;
L'ancien AttributStringWithString de NSAttributedString a fait la même chose, mais c'est maintenant obsolète.
Pour des raisons historiques, voici ma réponse initiale:
Réponse courte: vous ne pouvez pas. Pour modifier l'espacement entre les lignes de texte, vous devrez sous UILabel
- classer et rouler les vôtres drawTextInRect
, créer plusieurs étiquettes ou utiliser une police différente (peut-être une police modifiée pour une hauteur de ligne spécifique, voir la réponse de Phillipe).
Réponse longue: Dans le monde de l'imprimé et en ligne, l'espace entre les lignes de texte est appelé «leader» (rime avec «titre» et provient du métal de plomb utilisé il y a des décennies). Leading est une propriété en lecture seule de UIFont
, qui était obsolète dans la version 4.0 et remplacée par lineHeight
. Autant que je sache, il n'y a aucun moyen de créer une police avec un ensemble spécifique de paramètres tels que lineHeight
; vous obtenez les polices système et toute police personnalisée que vous ajoutez, mais vous ne pouvez pas les modifier une fois installées.
Il n'y a pas non plus de paramètre d'espacement dans UILabel
.
Je ne suis pas particulièrement satisfait du comportement de UILabel
's tel quel, donc je suggère d'écrire votre propre sous-classe ou d'utiliser une bibliothèque tierce. Cela rendra le comportement indépendant de votre choix de police et sera la solution la plus réutilisable.
J'aurais aimé qu'il y ait plus de flexibilité UILabel
et je serais heureux d'avoir tort!
À partir d'ios 6, vous pouvez définir une chaîne attribuée dans le UILabel:
la source
AttributedString
désactive par exemple l'alignement du texte de l'étiquette, vous devez donc l'ajouter au style de paragraphe.Vous pouvez contrôler l'espacement des lignes dans le storyboard:
question en double
la source
Depuis Interface Builder:
Par programme:
SWift 4
Utilisation de l'extension d'étiquette
Maintenant, appelez la fonction d'extension
Ou en utilisant une instance d'étiquette (copiez et exécutez simplement ce code pour voir le résultat)
Swift 3
la source
Ma solution était de patcher le fichier de police lui-même et de fixer définitivement sa hauteur de ligne. http://mbauman.net/geek/2009/03/15/minor-truetype-font-editing-on-a-mac/
J'ai dû modifier 'lineGap', 'ascender', 'descender' dans le bloc 'hhea' (comme dans l'exemple du blog).
la source
Ce gars a créé une classe pour obtenir la hauteur de ligne (sans utiliser CoreText, comme bibliothèque MTLabel): https://github.com/LemonCake/MSLabel
la source
La meilleure chose que j'ai trouvée est: https://github.com/mattt/TTTAttributedLabel
C'est une sous-classe UILabel, vous pouvez donc la déposer, puis modifier la hauteur de la ligne:
la source
J'ai trouvé des bibliothèques tierces comme celle-ci:
https://github.com/Tuszy/MTLabel
Pour être la solution la plus simple.
la source
Voici un code rapide pour vous permettre de définir l'interligne par programmation
la source
Bien sûr, la réponse de Mike ne fonctionne pas si vous passez la chaîne par programme. Dans ce cas, vous devez passer une chaîne attribuée et changer son style.
la source