Я создал подкласс UILabel, чтобы изменить выравнивание / положение текста внутри моих UILabel, но текст всегда выравнивается по верху.Я прочитал много тем, но не нашел кого-то, у кого такая же проблема, как у меня.
Похоже, что y origin в функции drawText моего подкласса игнорируется, когда я вызываю super.drawText(in: r)
.Я говорю это, потому что origin.x, size.width и size.height прямоугольника, который я отправляю super.drawText (), работают как положено
Снимок экрана с результатом , который я в настоящее время получаю с кодом ниже
Снимок экрана Что я хочу
Это мой подкласс UILabel:
class Label : UILabel {
enum VerticalAlignment {
case top
case middle
case bottom
}
enum HorizontalAlignment {
case left
case center
case right
}
var verticalAlignment: VerticalAlignment = .middle {
didSet { setNeedsDisplay() }
}
var horizontalAlignment: HorizontalAlignment = .center {
didSet { setNeedsDisplay() }
}
override public func textRect(forBounds bounds: CGRect, limitedToNumberOfLines: Int) -> CGRect {
var rect: CGRect = super.textRect(forBounds: bounds, limitedToNumberOfLines: limitedToNumberOfLines)
rect = CGRect(x: bounds.origin.x, y: bounds.origin.y, width: rect.size.width, height: rect.size.height)
switch verticalAlignment {
case .top:
break
case .middle:
rect.origin.y += ((bounds.size.height - rect.size.height) / 2.0)
case .bottom:
rect.origin.y += (bounds.size.height - rect.size.height)
}
switch horizontalAlignment {
case .left:
break
case .center:
rect.origin.x += ((bounds.size.width - rect.size.width) / 2.0)
case .right:
rect.origin.x += (bounds.size.width - rect.size.width)
}
return rect
}
override func drawText(in rect: CGRect) {
let r = self.textRect(forBounds: rect, limitedToNumberOfLines: self.numberOfLines)
super.drawText(in: r)
}
}
Как я создал свой ярлык:
func addtestLabel() {
var label: Label = Label()
label.text = "NICE LABEL!"
label.textColor = hexToUIColor(hex: "#ffffff")
label.frame = CGRect(x: 35, y: self.view.bounds.size.height - 120, width: self.view.bounds.size.width - 70, height: 75)
label.backgroundColor = hexToUIColor(hex: "#000000")
label.font = UIFont(name: "Savu-Condensed", size: label.frame.size.height / 2.0)
label.lineBreakMode = .byWordWrapping
label.numberOfLines = 1
self.view.addSubview(label)
}