この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
How to get UILabel's number of Lines
小ネタです。 UILabel の行数を知りたい場合は以下のコードで調べることができます。
サンプルコード
func lineNumber(label: UILabel, text: String) -> Int {
let oneLineRect = "a".boundingRectWithSize(label.bounds.size, options: .UsesLineFragmentOrigin, attributes: [NSFontAttributeName: label.font], context: nil)
let boundingRect = text.boundingRectWithSize(label.bounds.size, options: .UsesLineFragmentOrigin, attributes: [NSFontAttributeName: label.font], context: nil)
return Int(boundingRect.height / oneLineRect.height)
}
NSString のboundingRectWithSizeメソッドは、引数で与えられた情報を元にレシーバーの描画領域を計算します。
上記のコードについて
oneLineRectは1行分の描画領域を表します。 boundingRectは実際に表示したいテキストの描画領域を表します。 ここでは実際の描画領域の高さを1行分の描画領域の高さで割って行数を求めています。
UILabel の現在の行数を調べたい場合は以下のようなコードになります。
if let text = self.label.text {
println(self.lineNumber(self.label, text: text))
}
まとめ
boundingRectWithSizeメソッドは可変長なラベルを作成する時などに便利なメソッドです。 機会があれば使ってみてください。