2015-08-14 4 views
0

J'essaye de créer une classe personnalisée UILabel qui me permettra d'augmenter l'espacement des lignes sur un UILabel. Je sais que vous pouvez le faire dans IB avec une chaîne de caractères attribuée, mais cela ne fonctionne pas si vous utilisez des polices personnalisées. Voici mon code de classe:La propriété lineSpacing dans UILabel ne fonctionne pas comme prévu

import UIKit 

@IBDesignable 
class SpacingLabel: UILabel 
{ 

    @IBInspectable var lineSpacing: CGFloat = 10.0 

    override func awakeFromNib() 
    { 
     self.renderText() 
    } 

    override func prepareForInterfaceBuilder() 
    { 
     super.prepareForInterfaceBuilder() 
     self.renderText() 
    } 

    func renderText() 
    { 
     var attrString = NSMutableAttributedString(string:self.text!) 

     if font != nil 
     { 
      NSMutableParagraphStyle.defaultParagraphStyle().mutableCopy() 
      var paragraphStyle = NSMutableParagraphStyle.defaultParagraphStyle().mutableCopy() as!  NSMutableParagraphStyle 
      paragraphStyle.textAlignment = self.textAlignment 

      paragraphStyle.lineSpacing = self.lineSpacing 
      paragraphStyle.paragraphSpacing = self.lineSpacing 

      attrString.addAttributes([NSFontAttributeName : self.font!, NSParagraphStyleAttributeName : paragraphStyle], range: NSMakeRange(0, attrString.length)) 
      self.attributedText = attrString 
     } 

     self.needsUpdateConstraints() 
    } 

} 

Voici comment cela rend dans IB (storyboard):

enter image description here

Et voici comment il rend dans le simulateur:

enter image description here

J'ai essayé d'ajouter minimumLineHeight et/ou maximumLineHeight propriétés, mais ceux-ci semblent juste gâcher d'autres manières ...

Répondre

2

Alors ... Il s'est avéré que la propriété lineSpacing est en quelque sorte en conflit avec une variable/propriété privée possible au sein de UILabel. J'ai rebaptisé ma propriété à leading et maintenant cela fonctionne parfaitement.

+2

Pourriez-vous mettre votre réponse (code source final) ici? Ce serait vraiment utile. Merci! – ton

+0

Prenez simplement le code ci-dessus, remplacez la propriété 'lineSpacing' par' leading' ... Job done. :) – jowie