Est-il possible de réduire l'écart entre le texte, lorsqu'il est mis sur plusieurs lignes dans un UILabel
? Nous pouvons définir le cadre, la taille de la police et le nombre de lignes. Je veux réduire l'écart entre les deux lignes de cette étiquette.
objective-c
swift
xcode
uilabel
line-spacing
Abhinav
la source
la source
UILabel
, puis incorporez toutes les étiquettes dans aStackView
. Enfin, ajustez lespacing
deStackView
. N'oubliez pas de les empiler verticalement.Réponses:
J'ai pensé à ajouter quelque chose de nouveau à cette réponse, donc je ne me sens pas aussi mal ... Voici une réponse Swift :
"Réponse courte: vous ne pouvez pas. Pour modifier l'espacement entre les lignes de texte, vous devrez sous-classer UILabel et lancer votre propre drawTextInRect, ou créer plusieurs étiquettes."Voir: Définir l'espacement des lignes UILabel
Ceci est une réponse très ancienne, et d'autres ont déjà ajouté la nouvelle et meilleure façon de gérer cela. Veuillez consulter les réponses à jour fournies ci-dessous.la source
NSAttributedString
(également disponible dans les propriétés de UILable dans le générateur d'interface de Xcode).NSParagraphStyle
lorsque vous utilisez unNSAttributedString
. (Je devrais peut-être faire plus de tests sur les autres propriétés modifiables, mais lalineSpacing
propriété ne vous permet que de l'augmenter.)Dans Xcode 6, vous pouvez le faire dans le storyboard:
la source
À partir d'iOS 6, vous pouvez définir une chaîne attribuée à UILabel. Vérifiez les points suivants:
la source
attributedString
doit être unNSMutableAttributedString
(PAS NSAttributedString)NSMutableAttributedString *attributedString = [NSMutableAttributedString alloc]initWithString:@"sample text"];
lineSpacing
propriété duNSMutableParagraphStyle
n'est jamais négative, la hauteur de ligne ne peut donc pas être réduite avec cette approche. Pour répondre à la question, vous devez utiliser une autre propriété, voir la réponse @ d.ennis.Les solutions énoncées ici n'ont pas fonctionné pour moi. J'ai trouvé une façon légèrement différente de le faire avec iOS 6 NSAttributeString:
la source
J'ai créé cette extension simple qui fonctionne très bien pour moi:
Copiez ceci dans un fichier, vous pouvez donc l'utiliser comme ceci
la source
lineSpacing
et oubliez-vous le réglagelineHeightMultiple
?.lineSpacing = 1.4
et tout oublier.lineHeightMultiple
...Depuis Interface Builder (Storyboard / XIB):
Par programme:
SWift 4
Utilisation de l'extension d'étiquette
Appelez maintenant la fonction d'extension
Ou en utilisant une instance d'étiquette (il suffit de copier et d'exécuter ce code pour voir le résultat)
Swift 3
la source
Il existe maintenant une autre solution dans iOS 6, qui consiste à définir attributText sur l'étiquette, à l'aide d'un NSAttributedString avec les styles de paragraphe appropriés. Voir cette réponse de débordement de pile pour plus de détails sur la hauteur de ligne avec NSAttributedString:
Texte de base - Hauteur de ligne NSAttributedString bien faite?
la source
Voici une classe qui sous-classe UILabel pour avoir la propriété line-height: https://github.com/LemonCake/MSLabel
la source
En Swift et en fonction, inspiré de DarkDust
la source
Selon la réponse de @Mike, la réduction du
lineHeightMultiple
est le point clé. Exemple ci-dessous, cela fonctionne bien pour moi:la source
Extension utile de SWIFT 3 pour définir plus facilement l'espace entre les lignes :)
la source
J'ai trouvé un moyen de définir la hauteur réelle de la ligne (pas un facteur) et elle s'affiche même en direct dans Interface Builder . Suivez simplement les instructions ci-dessous. Le code est écrit en Swift 4 .
Étape # 1: créez un fichier nommé
DesignableLabel.swift
et insérez le code suivant:Étape # 2: Placez un
UILabel
dans un Storyboard / XIB et définissez sa classe surDesignableLabel
. Attendez la construction de votre projet (la construction doit réussir!).Étape 3: Maintenant, vous devriez voir une nouvelle propriété dans le volet des propriétés nommée "Hauteur de ligne". Définissez simplement la valeur que vous aimez et vous devriez voir les résultats immédiatement!
la source
Voici une sous-classe de UILabel qui définit
lineHeightMultiple
et s'assure que la hauteur intrinsèque est suffisamment grande pour ne pas couper le texte.la source
Dans Swift 2.0 ...
Ajoutez une extension:
Maintenant, définissez simplement votre UILabel comme attributText:
Évidemment, j'ai ajouté un tas de paramètres dont vous n'avez peut-être pas besoin. Jouez - n'hésitez pas à réécrire la méthode - Je cherchais cela sur un tas de réponses différentes, donc je pensais publier toute l'extension au cas où cela aiderait quelqu'un là-bas ... -rab
la source
Swift3 - Dans une extension UITextView ou UILabel, ajoutez cette fonction:
J'ai ajouté du code pour conserver le texte attribué actuel si vous utilisez déjà des chaînes attribuées avec la vue (au lieu de les écraser).
la source
Une autre réponse ... Si vous passez la chaîne par programme, vous devez passer une chaîne attribuée à la place d'une chaîne régulière et changer son style. (IOS10)
la source
Extension Swift 3:
la source
Cela devrait vous aider. Vous pouvez ensuite attribuer votre étiquette à cette classe personnalisée dans le storyboard et utiliser ses paramètres directement dans les propriétés:
la source
Extension d'étiquette Swift 4. Création de NSMutableAttributedString avant de passer à la fonction au cas où des attributs supplémentaires seraient nécessaires pour le texte attribué.
la source
Ce code a fonctionné pour moi (ios 7 et ios 8 pour sûr).
la source
Voici ma solution rapidement. La sous-classe doit fonctionner à la fois pour AttributeText et la propriété text et pour characterSpacing + lineSpacing. Il conserve l'espacement si une nouvelle chaîne ou une chaîne attribuée est définie.
la source
Comme solution de contournement rapide, simple et intelligente:
Pour les UILabels qui n'ont pas beaucoup de lignes, vous pouvez utiliser à la place stackViews.
Spacing
StackView à la quantité désiréeAssurez-vous de les empiler verticalement . Cette solution fonctionne également pour les polices personnalisées.
la source