Ich möchte den linken Einschub/Rand einer UILabel
und kann keine Methode finden, dies zu tun. Das Etikett hat einen Hintergrund festgelegt, so dass nur seine Herkunft ändern wird nicht den Trick tun. Es wäre ideal, den Text um 10px
oder so auf der linken Seite.
Antworten
Zu viele Anzeigen?
Andrey Gagan
Punkte
1168
Quincy
Punkte
1620
In vielen Antworten fehlt die Überschreibung von sizeThatFits. Mit dieser Unterklasse können Sie einfach das Etikett erstellen, die Füllung festlegen und dann label.SizeToFit() sagen und voila.
import UIKit
class UILabelEx : UILabel
{
var padding : UIEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
override func drawTextInRect(rect: CGRect) {
super.drawTextInRect(UIEdgeInsetsInsetRect(rect, padding))
}
override func sizeThatFits(size: CGSize) -> CGSize
{
var adjSize = super.sizeThatFits(size)
adjSize.width += padding.left + padding.right
adjSize.height += padding.top + padding.bottom
return adjSize
}
}
Avt
Punkte
16435
Swift 3 und AutoLayout kompatible Version:
class InsetLabel: UILabel {
var insets = UIEdgeInsets()
convenience init(insets: UIEdgeInsets) {
self.init(frame: CGRect.zero)
self.insets = insets
}
convenience init(dx: CGFloat, dy: CGFloat) {
let insets = UIEdgeInsets(top: dy, left: dx, bottom: dy, right: dx)
self.init(insets: insets)
}
override func drawText(in rect: CGRect) {
super.drawText(in: UIEdgeInsetsInsetRect(rect, insets))
}
override var intrinsicContentSize: CGSize {
var size = super.intrinsicContentSize
size.width += insets.left + insets.right
size.height += insets.top + insets.bottom
return size
}
}
Kaiusee
Punkte
1193
MB_iOSDeveloper
Punkte
4134