Здесь я пытаюсь создать метку с отступами (слева, справа, сверху и снизу) вокруг текста. Эта проблема связана с сообщением о SOF, и, прочитав несколько из них, я попытался использовать решение, предложенное здесь :
Это код для моего подкласса UILabel:
import UIKit
class LuxLabel: UILabel {
//let padding: UIEdgeInsets
var padding: UIEdgeInsets = UIEdgeInsets.zero {
didSet {
self.invalidateIntrinsicContentSize()
}
}
// Create a new PaddingLabel instance programamtically with the desired insets
required init(padding: UIEdgeInsets = UIEdgeInsets(top: 0, left: 10, bottom: 0, right: 10)) {
self.padding = padding
super.init(frame: CGRect.zero)
}
// Create a new PaddingLabel instance programamtically with default insets
override init(frame: CGRect) {
padding = UIEdgeInsets.zero // set desired insets value according to your needs
super.init(frame: frame)
}
// Create a new PaddingLabel instance from Storyboard with default insets
required init?(coder aDecoder: NSCoder) {
padding = UIEdgeInsets.zero // set desired insets value according to your needs
super.init(coder: aDecoder)
}
override func drawText(in rect: CGRect) {
super.drawText(in: UIEdgeInsetsInsetRect(rect, padding))
}
// Override `intrinsicContentSize` property for Auto layout code
override var intrinsicContentSize: CGSize {
let superContentSize = super.intrinsicContentSize
let width = superContentSize.width + padding.left + padding.right
let heigth = superContentSize.height + padding.top + padding.bottom
return CGSize(width: width, height: heigth)
}
}
Он основан на PaddingLabel (см. ссылку выше).
В основном это работает хорошо, но по некоторым причинам, которые я не понимаю, бывают случаи, когда что-то идет не так, и дисплей обрезается.
Вот пример:
Строка для размещения на этикетке:
«Он имеет квадратную форму и синий цвет».
Код для создания ярлыка:
let label = LuxLabel(padding: UIEdgeInsets(top: 5, left: 10, bottom: 5, right: 10))
label.numberOfLines = 0
и это результат:
Если я добавлю эту строку к двум выше:
label.lineBreakMode = .byWordWrapping
результат:
Я также установил некоторые ограничения. Все это работает в 95% случаев. Кто-нибудь может увидеть, в чем проблема?
numberOfLines = 0
иlineBreakMode = .byWordWrapping
? - person Priya   schedule 11.11.2017drawTextInRect
, и у меня никогда не было проблем. Я не понимаю, для чего нужна реализацияintrinsicContentSize
. Что будет, если просто удалить? - person matt   schedule 12.11.2017