UILabel line height in swift

Sviluppando App iOS capita spesso di dover implementare parti di Design che includono paragrafi di testo. Molto spesso può accadere che l’interlinea di sistema non sia quello desiderato.

Parliamo di Swift

Interlinea

Line height

L’interlinea, come riportato nell’immagine, è l’altezza di ogni riga del paragrafo di testo includendo l’altezza del font stesso.

UILabel + LineHeight

Sfortunatamente le API native di iOS non mettono nulla a disposizione per impostare il LineHeight all’interno di una UILabel. Per ovviare a questo problema Apple propone due classi molto potenti:

Come indica Apple nella documentazione ufficiale:

The NSMutableParagraphStyle class adds methods to its superclass, NSParagraphStyle, for changing the values of the subattributes in a paragraph style attribute. See the NSParagraphStyle and NSAttributedString specifications for more information.

NSMutableParagraphStyle fornisce il metodo che fa al caso nostro: lineSpacing.

LineSpacing ci consente di applicare ad una stringa un lineHeight desiderato.

Per integrare questa funzionalità all’interno di una UILabel ho creato un estensione della UILabel implementando un apposita funzione, setLineHeight(lineHeight: CGFloat).

Di seguito è riportato il frammento di codice da integrare all’interno dei vostri progetti:

import UIKit
 
extension UILabel {
    
    func setLineHeight(lineHeight: CGFloat) {
        let text = self.text
        if let text = text {
            let attributeString = NSMutableAttributedString(string: text)
            let style = NSMutableParagraphStyle()
            
            style.lineSpacing = lineHeight
            attributeString.addAttribute(NSParagraphStyleAttributeName, value: style, range: NSMakeRange(0, count(text)))
            self.attributedText = attributeString
        }
    }
}