Swift3で書き直しました
【iOS】UILabelにPaddingをつける(Swift3対応) - Qiita
上記の記事でSwift3用に書き直したソースコードを書いたので、そちらをご参考ください。
過去記事
UILabelに日本語フォントを設定している状態で英字を表示すると g とか q とか p など下に伸びる文字が切れて表示されることがあったのでそれの対応として UILabelに Paddingを設定しました。
PaddingLabel.swift
class PaddingLabel: UILabel {
// paddingの値
let padding = UIEdgeInsets(top: 4, left: 4, bottom: 4, right: 4)
override func drawTextInRect(rect: CGRect) {
let newRect = UIEdgeInsetsInsetRect(rect, padding)
super.drawTextInRect(newRect)
}
override func intrinsicContentSize() -> CGSize {
var intrinsicContentSize = super.intrinsicContentSize()
intrinsicContentSize.height += padding.top + padding.bottom
intrinsicContentSize.width += padding.left + padding.right
return intrinsicContentSize
}
}
ちょっと解説
override
しているメソッドについて少しだけ解説してみます。
drawTextInRect(rect: CGRect)
これは文字列を描画するメソッドです。
引数として渡されるrect: CGRect
が描画する位置は高さ、幅になります。
それをUIEdgeInsetsInsetRect(rect: CGRect, insets: UIEdgeInsets)
で描画範囲を広げています。
intrinsicContentSize() -> CGSize
これはUILabelがもともと持っているサイズになります。
AutoLayoutではこれがとっても重要になってきます。
intrinsicContentSize()
で適切なサイズを返さないとpaddingを設定してもそれが適用されず、表示されないというオチになります。
終わりに
今後使えるかと思ったのでメモがてらに書きました。