UILabel中的lineSpacing属性不能按预期工作

时间:2015-08-14 10:59:26

标签: ios swift uilabel nsattributedstring nsparagraphstyle

我正在尝试创建一个自定义UILabel类,这将允许我增加UILabel上的行间距。我知道您可以在IB中使用属性文本字符串执行此操作,但是如果您使用自定义字体,它不起作用。这是我的班级代码:

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()
    }

}

这是它在IB(故事板)中呈现的方式:

enter image description here

以下是它在模拟器中呈现的方式:

enter image description here

我已尝试添加minimumLineHeight和/或maximumLineHeight属性,但这些似乎只是以其他方式搞砸了......

1 个答案:

答案 0 :(得分:2)

所以......事实证明,属性lineSpacing在某种程度上与UILabel中可能的私有变量/属性发生冲突。我将我的财产重命名为leading,现在它完美无缺。