UILabelにいくつかのインセットを設定しようとしています。完全に機能しましたが、現在UIEdgeInsetsInsetRect
はCGRect.inset(by:)
に置き換えられており、これを解決する方法がわかりません。
インセットでCGRect.inset(by:)
を使用しようとすると、UIEdgeInsets
がCGRect
に変換できないというメッセージが表示されます。
class TagLabel: UILabel {
override func draw(_ rect: CGRect) {
let inset = UIEdgeInsets(top: -2, left: 2, bottom: -2, right: 2)
super.drawText(in: CGRect.insetBy(inset))
// super.drawText(in: UIEdgeInsetsInsetRect(rect, inset)) // Old code
}
}
インラベルをUILabelに設定する方法を知っている人はいますか?
以下のようにコードを更新してください
class TagLabel: UILabel {
override func draw(_ rect: CGRect) {
let inset = UIEdgeInsets(top: -2, left: 2, bottom: -2, right: 2)
super.drawText(in: rect.insetBy(inset))
}
}
ImhoあなたもintrinsicContentSize
を更新する必要があります:
class InsetLabel: UILabel {
let inset = UIEdgeInsets(top: -2, left: 2, bottom: -2, right: 2)
override func drawText(in rect: CGRect) {
super.drawText(in: rect.inset(by: inset))
}
override var intrinsicContentSize: CGSize {
var intrinsicContentSize = super.intrinsicContentSize
intrinsicContentSize.width += inset.left + inset.right
intrinsicContentSize.height += inset.top + inset.bottom
return intrinsicContentSize
}
}
// this code differs from the accepted answer because the accepted answer uses insetBy(inset) and this answer uses inset(by: inset). When I added this answer in iOS 10.1 and Swift 4.2.1 autocomplete DID NOT give you rect.inset(by: )and I had to manually type it. Maybe it does in Swift 5, I'm not sure
IOSの場合10.1
およびSwift 4.2.1
使用する rect.inset(by:
)
この:
override func draw(_ rect: CGRect) {
let inset = UIEdgeInsets(top: -2, left: 2, bottom: -2, right: 2)
super.drawText(in: rect.inset(by: inset))
}
UIEdgeInsetsInsetRectを使用した「古いコード」は問題なく機能するはずです。
https://developer.Apple.com/documentation/coregraphics/cgrect/1454218-insetby
編集#1:
iOS 12 APIの変更:
https://developer.Apple.com/documentation/coregraphics/cgrect/1624499-inset?changes=latest_minor