J'essaie de définir des encarts dans un UILabel. Cela a parfaitement fonctionné, mais
UIEdgeInsetsInsetRect
a été remplacé par CGRect.inset(by:)
et je ne trouve pas comment résoudre ce problème.
Lorsque j'essaie d'utiliser CGRect.inset(by:)
avec mes encarts, je reçois alors le message que UIEdgeInsets
n'est pas convertible en 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
}
}
Quelqu'un sait comment définir les incrustations dans UILabel?
Veuillez mettre à jour votre code comme ci-dessous
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))
}
}
À mon humble avis, vous devez également mettre à jour la 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
}
}
Pour iOS 10.1
et Swift 4.2.1
, utilisez rect.inset(by:
)
ce:
override func draw(_ rect: CGRect) {
let inset = UIEdgeInsets(top: -2, left: 2, bottom: -2, right: 2)
super.drawText(in: rect.inset(by: inset))
}
Votre "ancien code" avec UIEdgeInsetsInsetRect devrait fonctionner correctement.
https://developer.Apple.com/documentation/coregraphics/cgrect/1454218-insetby
Edité # 1:
changements dans l'API iOS 12:
https://developer.Apple.com/documentation/coregraphics/cgrect/1624499-inset?changes=latest_minor