Набор вкладышей на UILabel - PullRequest
0 голосов
/ 26 июня 2018

Я пытаюсь установить несколько вставок в 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?

Ответы [ 4 ]

0 голосов
/ 19 ноября 2018

Для 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))
}
0 голосов
/ 26 июня 2018

Ваш "старый код" с UIEdgeInsetsInsetRect должен работать очень хорошо.

https://developer.apple.com/documentation/coregraphics/cgrect/1454218-insetby

Отредактировано # 1:

Изменения API iOS 12:

https://developer.apple.com/documentation/coregraphics/cgrect/1624499-inset?changes=latest_minor

0 голосов
/ 26 июня 2018

Имхо вы тоже должны обновить 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
    }

}
0 голосов
/ 26 июня 2018

Пожалуйста, обновите ваш код, как показано ниже

 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))
    }
}
...