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):
Et voici comment il rend dans le simulateur:
J'ai essayé d'ajouter minimumLineHeight
et/ou maximumLineHeight
propriétés, mais ceux-ci semblent juste gâcher d'autres manières ...
Pourriez-vous mettre votre réponse (code source final) ici? Ce serait vraiment utile. Merci! – ton
Prenez simplement le code ci-dessus, remplacez la propriété 'lineSpacing' par' leading' ... Job done. :) – jowie