文字列から高さと幅を取得する

f:id:daihase:20190809100049p:plain

こんにちは、daihaseです。

ちょっと久々の投稿になりますが、今日はSwiftネタを。 開発をしていると文字列から高さ・幅を取得したい時って出てこないですかね?

そんなちょっとしたTipsを紹介。

まずStringを拡張したクラスを以下のように作ります。

import UIKit

extension String {
    public func widthOfString(usingFont font: UIFont) -> CGFloat {
        let attributes = [NSAttributedStringKey.font: font]
        let size = self.size(withAttributes: attributes)
        return size.width
    }

    public func heightOfString(usingFont font: UIFont) -> CGFloat {
        let attributes = [NSAttributedStringKey.font: font]
        let size = self.size(withAttributes: attributes)
        return size.height
    }
}

 

文字列に対してfontをセットしてやることでその幅と高さを返すメソッドですね。ではこれを実際にViewController側から使ってみます。

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let text = "こんにちは"
        let font = UIFont.systemFont(ofSize: 12)

        let width = text.widthOfString(usingFont: font)
        let height = text.heightOfString(usingFont: font)

        print("width: \(width)\nheight: \(height)")
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

こちらを応用するとしたらサーバーから取得した文字列に対して高さと幅を取得しそれを元にUIを生成する、といったケースなどでしょうか。

それでは良い開発ライフを〜