У меня есть подкласс UILabel, который я собираюсь использовать для примерно 10 различных меток различной длины (все по одной строке!) В IB. Текст в каждой из этих меток является статическим.
В этой подклассе UILabel должно отображаться изображение слева от текста. Этот imageView будет содержать маленький значок.
Это близко к работе, за исключением того, что я получаю странное усечение и выравнивание, как показано на скриншоте ниже.
Simulator:
Настройка раскадровки:
Вот мой код:
class ImageMarkLabel: UILabel {
var labelHeight:CGFloat = 0.0
let smileView = UIView()
let smileImageView = UIImageView()
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!
self.commonInit()
}
override init(frame: CGRect) {
super.init(frame: frame)
self.commonInit()
}
override func layoutSubviews() {
super.layoutSubviews()
uiStuff()
}
func uiStuff() {
labelHeight = self.frame.height
smileView.frame = CGRect(x: 0, y: 0, width: labelHeight, height: labelHeight)
smileImageView.image = UIImage(named: "smile")
smileImageView.frame = CGRect(x: 0, y: 0, width: smileView.frame.width, height: smileView.frame.height)
}
func commonInit(){
smileView.addSubview(smileImageView)
self.addSubview(smileView)
}
override func drawText(in rect: CGRect) {
var insets = UIEdgeInsets()
if UIDevice.current.userInterfaceIdiom == .pad {
insets = UIEdgeInsets(top: 0, left: labelHeight + 10.0, bottom: 0, right: labelHeight + 10.0)
}
else {
insets = UIEdgeInsets(top: 0, left: labelHeight + 5.0, bottom: 0, right: labelHeight + 5.0)
}
super.drawText(in: rect.inset(by: insets))
}
}
Относительно автоматической разметки - все метки находятся в вертикальном виде стека.
Как сделать так, чтобы текст и изображение просматривались по центру без обрезания текста?