web-dev-qa-db-ja.com

Swiftフォントから1行のテキストの高さを計算する方法

TextFieldのテキストの高さと同じ距離でラベルを垂直方向に変換するアニメーションを作成する必要があるという問題が発生しました。ほとんどの場合、textField.bounds.heigtしかし、textFieldの高さがテキストの高さよりも大きい場合、それは私には何の役にも立ちません。だから私は知る必要があります:文字列テキストの行の高さをそのUIFontから計算する方法?

重複について:私が必要としているものとは少し異なります。その回答(私の回答で参照しました)は、1)文字列2)幅3)フォントに応じて全体の高さを取得します。必要なのはフォントにのみ依存する1行の高さです。

10
Ismail

UIFontにはプロパティlineHeightがあります:

    if let font = _textView.font {
        let height = font.lineHeight
    }

ここで、fontはあなたのフォントです

17

私はそれを行う方法を探していて、これを見つけました answer ここで、文字列と特定のフォントのサイズを計算するためのString拡張子があります。私はそれを私が望むことをするように修正しました(フォントを使用して書かれたテキストの行の高さを取得します。):

extension UIFont {
    func calculateHeight(text: String, width: CGFloat) -> CGFloat {
        let constraintRect = CGSize(width: width, height: CGFloat.greatestFiniteMagnitude)
        let boundingBox = text.boundingRect(with: constraintRect,
                                        options: NSStringDrawingOptions.usesLineFragmentOrigin,
                                        attributes: [NSAttributedStringKey.font: self],
                                        context: nil)
        return boundingBox.height
    }
}

これが誰かがそれを探しているのに役立つことを願っています。 (将来は自分自身になるかもしれません)。

4
Ismail