読者です 読者をやめる 読者になる 読者になる

山下寛人オフィシャルブログ

オイシックス株式会社 執行役員 システム本部長 山下寛人の公式ブログです。

テキストの高さを調べる(swift)

横幅を固定してテキストを表示したとき、改行して複数行になる場合があります。そういうときの縦幅ピクセル数を調べるにはどうしたらよいでしょう。

調べてみたところObjective-CではNSStringにsizeWithFontメソッドがあるようです。正確には、ありました。現在では廃止されています。
代替としてはNSStringのsizeWithAttributesメソッドがあるようです。しかしattributesに横幅ピクセル数をどのように設定するかわからず。さらにわかったとしてもSwiftでNSStringを使うにはキャストしたりしなければならずとてもいけてないです。
ということで、高さを知りたいだけですがUILabelオブジェクトを作ってしまうというのが一番よいのではないかという結論に至りました。

func getTextHeight(text: String) -> CGFloat {

    var label: UILabel = UILabel()

    label.text = text

    label.font = UIFont.systemFontOfSize(20)

    label.frame.size = CGSizeMake(137, 1000)

    label.numberOfLines = 0

    label.sizeToFit()

    return label.frame.height

}


こんな具合です。frameで縦幅を大きめに指定しておきsizeToFit()するのがポイントです。