objective c - How to control the line spacing in UILabel

ID : 10311

viewed : 25

Tags : objective-cswiftxcodeuilabelline-spacingobjective-c

Top 5 Answer for objective c - How to control the line spacing in UILabel

vote vote

94

In Xcode 6 you can do this in the storyboard:

enter image description here

vote vote

82

I thought about adding something new to this answer, so I don't feel as bad... Here is a Swift answer:

import Cocoa  let paragraphStyle = NSMutableParagraphStyle() paragraphStyle.lineSpacing = 40  let attrString = NSMutableAttributedString(string: "Swift Answer") attrString.addAttribute(.paragraphStyle, value:paragraphStyle, range:NSMakeRange(0, attrString.length))  var tableViewCell = NSTableCellView() tableViewCell.textField.attributedStringValue = attrString 

"Short answer: you can't. To change the spacing between lines of text, you will have to subclass UILabel and roll your own drawTextInRect, or create multiple labels."

See: Set UILabel line spacing


This is a really old answer, and other have already addded the new and better way to handle this.. Please see the up to date answers provided below.

vote vote

73

Starting from iOS 6 you can set an attributed string to the UILabel. Check the following :

NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:label.text]; NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; paragraphStyle.lineSpacing = spacing; [attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, label.text.length)];  label.attributedText = attributedString; 
vote vote

68

The solutions stated here didn't work for me. I found a slightly different way to do it with the iOS 6 NSAttributeString:

myLabel.numberOfLines = 0;  NSString* string = @"String with line one. \n Line two. \n Line three."; NSMutableParagraphStyle *style  = [[NSMutableParagraphStyle alloc] init]; style.minimumLineHeight = 30.f; style.maximumLineHeight = 30.f; NSDictionary *attributtes = @{NSParagraphStyleAttributeName : style,}; myLabel.attributedText = [[NSAttributedString alloc] initWithString:string                                                          attributes:attributtes];    [myLabel sizeToFit]; 
vote vote

53

From Interface Builder (Storyboard/XIB):

enter image description here

Programmatically:

SWift 4

Using label extension

extension UILabel {      // Pass value for any one of both parameters and see result     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     } } 

Now call extension function

let label = UILabel() let stringValue = "How to\ncontrol\nthe\nline spacing\nin UILabel"  // 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 

Or using label instance (Just copy & execute this code to see result)

let label = UILabel() let stringValue = "How to\ncontrol\nthe\nline spacing\nin UILabel" 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 

Swift 3

let label = UILabel() let stringValue = "How to\ncontrol\nthe\nline spacing\nin UILabel" 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 

Top 3 video Explaining objective c - How to control the line spacing in UILabel

Related QUESTION?