2016-08-26 31 views
17

Mam etykietę, która ma kilka wierszy tekstu i chcę zwiększyć odstępy między wierszami. Są podobne pytania zadawane przez innych, ale rozwiązania nie rozwiązują moich problemów. Również moja etykieta może zawierać akapity lub nie. Jestem nowy w Swift. Czy istnieje rozwiązanie przy użyciu storyboardu? Lub tylko poprzez NSAttributedString jest to możliwe?Jak zwiększyć odstępy między wierszami w UILabel w Swift

Odpowiedz

38

Programowo dodaj LineSpacing do swojego UILabel za pomocą następującego fragmentu.

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

To pokazuje błąd "wartość typu 'NSAttributedString' nie ma elementu 'addAttribute'". – Sneha

+0

Musimy użyć 'NSMutableAttributedString' zamiast' NSAttributedString'. Zaktualizowałem Asnwer. –

+0

Praca z niestandardowymi czcionkami Również Great @ Dipen Panchasara –

31

Możesz kontrolować odstępy między wierszami w storyboard.

enter image description here

Same question.

+2

Tak naprawdę to wypróbowałem. Ale nie działa. Również nie jest to przydatne w przypadku czcionek niestandardowych. – Sneha

+0

Jeśli masz do czynienia z niedopasowaniem do niestandardowych czcionek, spróbuj zaktualizować właściwość 'ascender' jako [tutaj wspomniano] (http://stackoverflow.com/a/8314285/988169). – pkc456

+1

To nie jest problem z nieprawidłowym wyrównaniem. Nie mogę wybrać niestandardowej czcionki za pomocą rozwiązania, o którym mówisz @ pkc456 – Sneha

21

z interfejsu Builder:

enter image description here

Programowo:

Swift 4

Korzystanie rozszerzenie etykiety

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

Teraz nazywamy funkcja rozszerzenie

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 

lub za pomocą instancji Label (wystarczy skopiować & wykonanie tego kodu, aby zobaczyć wynik)

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" miał błąd, zamiast tego użyłem "NSParagraphStyleAttributeName". – Alfi

+0

@Alfi - Różnica wersji językowej Swift. Błyskawiczny lang twojego projektu. Wersja może być szybka 3.x i tutaj są odpowiedzi dla obu wersji. Spróbuj z kodem Swift 3. – Krunal