[Xcode/Swift] StringStylizerでUILabelのLineHeightをカスタムする

UIKitで困ったこと

Storyboard, Xib上だと、Color, Lines, Alignmentとかは設定できるけど、LineHeight (行間)は設定できないと今更気づいた。

どうしたものかと考えていたら、StringStylizerなる便利なライブラリがあったので使ってみたら簡単に設定できた。

実装

StringStylizerの導入

SPM経由でダウンロード

Extensionに切り分けで共通化

import UIKit
import StringStylizer

extension UILabel {
    func setLineHeight(_ lineHeight: CGFloat, maximum: CGFloat? = nil) {
        guard let text = self.text, !text.isEmpty else { return }

        let maxHeight = (maximum != nil) ? maximum : lineHeight
        let styled = text.stylize()
            .font(self.font)
            .paragraphLineHeight(maximum: maxHeight, minimum: lineHeight)
            .attr
        self.attributedText = styled
    }
}

使い方

UILabelのdidSetでそのままLineHeightを指定して設定可能

@IBOutlet private weak var customLineHeightLabel: UILabel! {
    didSet {
        customLineHeightLabel.setLineHeight(60)
    }
}

ビルドして確認:

LineHeight以外にも、特定のLabelだけのフォントや色を変えたりとかも可能なので、目的に応じたExtensionでカスタムしていくのが良さそうですね。