UILabelの行数に応じてフォントサイズを変更したりしたかったのでこちらを参考にExtensionとして実装しました
やや使いにくそうでしたので、Swift5に対応してExtensionとして切り出して引数を必要としない形にしました。
環境
Swift 5
Xcode 11.2.1
行数を調べるExtension
行数を計算したいUILabelで利用してください
extension UILabel {
/// 行数を返す
func lineNumber() -> Int {
let oneLineRect = "a".boundingRect(
with: self.bounds.size,
options: .usesLineFragmentOrigin,
attributes: [NSAttributedString.Key.font: self.font ?? UIFont()],
context: nil
)
let boundingRect = (self.text ?? "").boundingRect(
with: self.bounds.size,
options: .usesLineFragmentOrigin,
attributes: [NSAttributedString.Key.font: self.font ?? UIFont()],
context: nil
)
return Int(boundingRect.height / oneLineRect.height)
}
}