Objective C - UILabel多行垂直间隙高度

问题描述:

我有一个多行UILabel,最多可以使用3行。 即message.numberOfLines = 3;Objective C - UILabel多行垂直间隙高度

一切工作正常,但我怎样才能设置行之间的垂直差距? 例如第1行和第2行等?

请微启,
三通

+0

这可能帮助: http://*.com/questions/ 3880526/how-to-increase-a-space-between-lines-in-multiline-label – 2013-01-11 06:13:09

我一直没能找到一种方法来调整行间距。 UILabel的font属性有一些只读属性,所以这不会有帮助。

如果我想改变行间距,我已经采取了自己的文字。我使用NSString的-drawAtPoint和-drawInRect并使用一个或多个-sizeWithFont方法来计算文本将分割文本并在每行中绘制正确数量的单词或字符的时间。

+0

谢谢,你介意添加一些示例代码吗? – 2010-08-11 10:43:48

+2

是的,使行高只读似乎是一个非常奇怪的疏忽。就像“谁会想要调整这个?” :) – 2011-01-20 14:43:13

不幸的是,我意识到的唯一好办法是自己绘制文本。在3.2或更高版本中,您可以使用CoreText直接绘制文本 - 我不确定CT是否可用于iPhones> = 4.0。 CoreText是用于灵活文本绘制的功能性C API。

编程:

SWIFT 4

使用标签扩展

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 
    } 
} 

现在调用扩展功能

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 

或者,用1阿贝尔实例(只复制&执行该代码来查看结果)

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 

从界面生成器:

enter image description here