2016-08-22 1 views
0

Ce à quoi ressemble ma sous-classe pour UILabel:Comment définir le remplissage pour UILabel en utilisant la propriété @IBDesignable?

@IBDesignable class AttributedLabel: UILabel { 

    @IBInspectable var padding: CGFloat = 0 

    override func drawTextInRect(rect: CGRect) { 
     super.drawTextInRect(UIEdgeInsetsInsetRect(rect, UIEdgeInsetsMake(padding, padding, padding, padding))) 
    } 
} 

Je correctement réglé padding en story-board, mais cela ne fonctionne pas parce que le rembourrage est toujours 0.

Que faire pour le faire fonctionner? Est-il possible de le rendre vivant dans Storyboard?

Répondre

0

Utiliser comme ceci; Changez les rembourrages haut, bas, gauche et droit.

@IBDesignable class AttributedLabel: UILabel { 

    @IBInspectable var topInset: CGFloat = 5.0 
    @IBInspectable var bottomInset: CGFloat = 5.0 
    @IBInspectable var leftInset: CGFloat = 7.0 
    @IBInspectable var rightInset: CGFloat = 7.0 

    override func drawTextInRect(rect: CGRect) { 
     let insets = UIEdgeInsets(top: topInset, left: leftInset, bottom: bottomInset, right: rightInset) 
     super.drawTextInRect(UIEdgeInsetsInsetRect(rect, insets)) 
    } 

    override func intrinsicContentSize() -> CGSize { 
     var intrinsicSuperViewContentSize = super.intrinsicContentSize() 
     intrinsicSuperViewContentSize.height += topInset + bottomInset 
     intrinsicSuperViewContentSize.width += leftInset + rightInset 
     return intrinsicSuperViewContentSize 
    } 
} 

Merci

1

Votre sous-classe semble incomplète. Comme il est mentionné dans la documentation, vous devez passer outre ces deux méthodes:

public func textRectForBounds(bounds: CGRect, limitedToNumberOfLines numberOfLines: Int) -> CGRect 
public func drawTextInRect(rect: CGRect) 

Voici un exemple d'implémentation qui devrait fonctionner:

@IBDesignable class AttributedLabel : UILabel 
{ 
    @IBInspectable var padding: CGFloat = 0 { 
     didSet { 
      self.textInsets = UIEdgeInsets(top: self.padding, left: self.padding, bottom: self.padding, right: self.padding) 
     } 
    } 
    var textInsets = UIEdgeInsetsZero { 
     didSet { 
      self.invalidateIntrinsicContentSize() 
     } 
    } 

    override func textRectForBounds(bounds: CGRect, limitedToNumberOfLines numberOfLines: Int) -> CGRect 
    { 
     var insets = self.textInsets 
     let insetRect = UIEdgeInsetsInsetRect(bounds, insets) 
     let textRect = super.textRectForBounds(insetRect, limitedToNumberOfLines: numberOfLines) 
     insets = UIEdgeInsets(top: -insets.top, left: -insets.left, bottom: -insets.bottom, right: -insets.right) 
     return UIEdgeInsetsInsetRect(textRect, insets) 
    } 

    override func drawTextInRect(rect: CGRect) { 
     super.drawTextInRect(UIEdgeInsetsInsetRect(rect, self.textInsets)) 
    } 
} 

Vous ne serez pas en mesure de le rendre vivant dans Interface Builder si .