Я создаю UILabel программно и испытываю трудности с получением каких-либо отступов вокруг текста метки:
После изучения множества SO-тем по теме( этот , в частности) Я думал, что нашел решение, но оно не влияет на лейбл.Я создал собственный класс для метки, которая подклассов UILabel
:
// Swift 3 (I know, I know...)
class PublicationTypeBadge: UILabel {
var textInsets = UIEdgeInsets.zero {
didSet { invalidateIntrinsicContentSize() }
}
override func textRect(forBounds bounds: CGRect, limitedToNumberOfLines numberOfLines: Int) -> CGRect {
let insetRect = UIEdgeInsetsInsetRect(bounds, textInsets)
let textRect = super.textRect(forBounds: insetRect, limitedToNumberOfLines: numberOfLines)
let invertedInsets = UIEdgeInsets(top: -textInsets.top,
left: -textInsets.left,
bottom: -textInsets.bottom,
right: -textInsets.right)
return UIEdgeInsetsInsetRect(textRect, invertedInsets)
}
override func drawText(in rect: CGRect) {
super.drawText(in: UIEdgeInsetsInsetRect(rect, textInsets))
}
}
И я вызываю его так:
func setPubTypeBadge(publication: PublicationModel, indexPathRow: Int) {
if let pubType = publication.publicationType,
let pubEnum = PublicationType(rawValue: pubType) {
pubTypeBadge.attributedText = pubEnum.getBadgeLabel(using: pubType)
}
let rect = pubTypeBadge.textRect(forBounds: pubTypeBadge.frame, limitedToNumberOfLines: 1)
pubTypeBadge.drawText(in: rect)
pubTypeBadge.layer.borderColor = UIColor.dsShade3.cgColor
pubTypeBadge.layer.borderWidth = 1
pubTypeBadge.layer.cornerRadius = 4
}
, который абсолютно ничего не делает с заполнением/ вставки касаются.Я просто хочу, чтобы между текстом и границей оставалось 6 пунктов пространства слева / справа и 4 элемента сверху / снизу.Любая помощь с благодарностью.