2009-11-15 46 views
2

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

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

請微啓,
三通

+0

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

回答

3

我一直沒能找到一種方法來調整行間距。 UILabel的font屬性有一些只讀屬性,所以這不會有幫助。

如果我想改變行間距,我已經採取了自己的文字。我使用NSString的-drawAtPoint和-drawInRect並使用一個或多個-sizeWithFont方法來計算文本將分割文本並在每行中繪製正確數量的單詞或字符的時間。

+0

謝謝,你介意添加一些示例代碼嗎? – 2010-08-11 10:43:48

+2

是的,使行高只讀似乎是一個非常奇怪的疏忽。就像「誰會想要調整這個?」 :) – 2011-01-20 14:43:13

0

不幸的是,我意識到的唯一好辦法是自己繪製文本。在3.2或更高版本中,您可以使用CoreText直接繪製文本 - 我不確定CT是否可用於iPhones> = 4.0。 CoreText是用於靈活文本繪製的功能性C API。

0

編程:

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