Swift UILabelにpaddingをつける


簡単な方法

一番簡単な方法はテキストを中央寄せにして、Label自体のwidth, heightを伸ばすやり方。

label.text = "文字列"
label.textAlignment = .center
//書き出す文字列にサイズを合わす
label.sizeToFit()
//余白となるサイズを加える
label.frame.size.width += 20
label.frame.size.height += 10


UILabelの拡張クラスを作成する方法

drawTextをoverrideしてtext書き出し時に余白を与える。

import UIKit

class MyUIPaddingLabel: UILabel {
    var tagPadding:CGFloat = 7
    override func drawText(in rect: CGRect) {
        let insets = UIEdgeInsets(top: tagPadding, left: tagPadding, bottom: tagPadding, right: tagPadding)
        super.drawText(in: rect.inset(by: insets))
    }
}

drawText時に余白を与えるのでこういった利用も可能。

myUIPaddingLabel = MyUIPaddingLabel()
myUIPaddingLabel.tagPadding:CGFloat = 10
myUIPaddingLabel.text = "文字列"

しかしながら、drawTextした後にsizeToFitするとおかしな挙動になるので注意。

myUIPaddingLabel = MyUIPaddingLabel()
myUIPaddingLabel.tagPadding:CGFloat = 10
myUIPaddingLabel.text = "長い文字列長い文字列長い文字列長い文字列長い文字列長い文字列"
myUIPaddingLabel.sizeToFit()

当然、paddingの余白がsizeToFitによって変更されてしまう。