2016-08-26 4 views
17

J'ai une étiquette qui a peu de lignes de texte et je veux augmenter l'espacement entre les lignes. Des questions similaires sont posées par d'autres mais les solutions ne résolvent pas mes problèmes. De plus, mon étiquette peut ou non contenir des paragraphes. Je suis nouveau au Swift. Existe-t-il une solution utilisant le storyboard? Ou seulement à travers NSAttributedString c'est possible?Comment faire pour augmenter l'interligne dans UILabel dans Swift

Répondre

38

Ajoutez ProgramSpacing à votre UILabel en utilisant l'extrait suivant.

let attributedString = NSMutableAttributedString(string: "Your text") 

// *** Create instance of `NSMutableParagraphStyle` 
let paragraphStyle = NSMutableParagraphStyle() 

// *** set LineSpacing property in points *** 
paragraphStyle.lineSpacing = 2 // Whatever line spacing you want in points 

// *** Apply attribute to string *** 
attributedString.addAttribute(NSParagraphStyleAttributeName, value:paragraphStyle, range:NSMakeRange(0, attributedString.length)) 

// *** Set Attributed String to your label *** 
label.attributedText = attributedString; 
+0

Cela montre une erreur "Valeur de type 'NSAttributedString' n'a pas membre 'addAttribute'". – Sneha

+0

Nous devons utiliser 'NSMutableAttributedString' à la place de' NSAttributedString'. J'ai mis à jour asnwer. –

+0

Travailler avec des polices personnalisées Aussi génial @ Dipen Panchasara –

31

Vous pouvez contrôler l'interlignage dans storyboard.

enter image description here

Same question.

+2

J'ai effectivement essayé cela. Mais ça ne marche pas. De plus, cela n'est pas utile pour les polices personnalisées. – Sneha

+0

Si vous faites face à un alignement incorrect dans les polices personnalisées, essayez de mettre à jour la propriété 'ascender' comme [mentionné ici] (http://stackoverflow.com/a/8314285/988169). – pkc456

+1

Ce n'est pas un problème d'alignement incorrect. Je ne peux pas sélectionner ma police personnalisée avec la solution que vous avez indiquée @ pkc456 – Sneha

21

De Interface Builder:

enter image description here

Programmatically:

SWift 4

en utilisant l'extension de l'étiquette

extension UILabel { 

    func setLineSpacing(lineSpacing: CGFloat = 0.0, lineHeightMultiple: CGFloat = 0.0) { 

     guard let labelText = self.text else { return } 

     let paragraphStyle = NSMutableParagraphStyle() 
     paragraphStyle.lineSpacing = lineSpacing 
     paragraphStyle.lineHeightMultiple = lineHeightMultiple 

     let attributedString:NSMutableAttributedString 
     if let labelattributedText = self.attributedText { 
      attributedString = NSMutableAttributedString(attributedString: labelattributedText) 
     } else { 
      attributedString = NSMutableAttributedString(string: labelText) 
     } 

     // Line spacing attribute 
     attributedString.addAttribute(NSAttributedStringKey.paragraphStyle, value:paragraphStyle, range:NSMakeRange(0, attributedString.length)) 

     self.attributedText = attributedString 
    } 
} 

appellent maintenant la fonction d'extension

let label = UILabel() 
let stringValue = "Set\nUILabel\nline\nspacing" 

// Pass value for any one argument - lineSpacing or lineHeightMultiple 
label.setLineSpacing(lineSpacing: 2.0) . // try values 1.0 to 5.0 

// or try lineHeightMultiple 
//label.setLineSpacing(lineHeightMultiple = 2.0) // try values 0.5 to 2.0 

Ou à l'aide par exemple d'étiquette (Il suffit de copier & exécuter ce code pour voir le résultat)

let label = UILabel() 
let stringValue = "Set\nUILabel\nline\nspacing" 
let attrString = NSMutableAttributedString(string: stringValue) 
var style = NSMutableParagraphStyle() 
style.lineSpacing = 24 // change line spacing between paragraph like 36 or 48 
style.minimumLineHeight = 20 // change line spacing between each line like 30 or 40 

// Line spacing attribute 
attrString.addAttribute(NSAttributedStringKey.paragraphStyle, value: style, range: NSRange(location: 0, length: stringValue.characters.count)) 

// Character spacing attribute 
attrString.addAttribute(NSAttributedStringKey.kern, value: 2, range: NSMakeRange(0, attrString.length)) 

label.attributedText = attrString 

Swi ft 3

let label = UILabel() 
let stringValue = "Set\nUILabel\nline\nspacing" 
let attrString = NSMutableAttributedString(string: stringValue) 
var style = NSMutableParagraphStyle() 
style.lineSpacing = 24 // change line spacing between paragraph like 36 or 48 
style.minimumLineHeight = 20 // change line spacing between each line like 30 or 40 
attrString.addAttribute(NSParagraphStyleAttributeName, value: style, range: NSRange(location: 0, length: stringValue.characters.count)) 
label.attributedText = attrString 
+0

"NSAttributedStringKey.paragraphStyle" avait une erreur, j'ai utilisé "NSParagraphStyleAttributeName" à la place. – Alfi

+0

@Alfi - C'est la différence de la version en langage Swift. Le langage rapide de votre projet. la version peut être 3.x rapide et voici les réponses pour les deux versions. Essayez avec le code Swift 3. – Krunal