添加NSMutableParagraphStyle lineSpacing导致文本不适合UILabel

时间:2015-04-25 17:57:25

标签: swift uilabel nsparagraphstyle

我创建了一个普通的UILabel,并希望能够为UILabel中的文本添加行间距。

虽然当我这样做时会影响adjustsFontSizeToFitWidth并且它不再适合UILabel。

我使用的一些代码:

        var userQuestionsAnswer = UILabel(frame: CGRectMake(0, 0, 20, 20))
        userQuestionsAnswer.font = UIFont(name: Font.GothamBlack, size: 15)
        userQuestionsAnswer.numberOfLines = 0
        userQuestionsAnswer.adjustsFontSizeToFitWidth = true

        var style = NSMutableParagraphStyle()
        style.lineSpacing = view.frame.size.height * 0.021
        style.alignment = NSTextAlignment.Center
        let attributes = [NSParagraphStyleAttributeName : style]
        var answerText = "This is the answer"

        self.userQuestionsAnswer.attributedText = NSAttributedString(string: answerText!, attributes:attributes)

任何人都可以告诉我为什么会这样,以及我如何解决它?

2 个答案:

答案 0 :(得分:1)

删除NSMutableParagraphStyle,它会起作用。 我不知道为什么,但这个属性是打破文本字体大小调整的原因。

答案 1 :(得分:0)

可能的解决方案是:

  1. 在storyboard \ xib中设置 paragraphStyle 相关属性(lineHeightMultiplier,alignment等); (screenshot 1screenshot 2
  2. 在更改标签的属性文本之前获取 paragraphStyle ;
  3. 创建您需要的referencedString;
  4. paragrapshStyle 属性添加到attributedString;
  5. attributedString 设置为 attributedText 属性。
  6. 不使用任何语法-sil-lib,它可能如下所示:

        func paragraphStyle(in attrString: NSAttributedString?) -> NSParagraphStyle? {
            return attrString?.attribute(NSParagraphStyleAttributeName, at: 0, effectiveRange: nil) as? NSParagraphStyle
        }
    
        let text = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book."
    
        let attributedText = NSMutableAttributedString(string: text, attributes: [
            NSFontAttributeName: UIFont.systemFont(ofSize: 20.0),
            NSForegroundColorAttributeName: UIColor.orange
        ])
    
        if let paragraphStyle = paragraphStyle(in: label.attributedText) {
            let textRange = NSMakeRange(0, text.characters.count)
            attributedText.addAttribute(NSParagraphStyleAttributeName, value: paragraphStyle, range: textRange)
        }
    
        label.attributedText = attributedText
    

    使用pod'SwiftyAttributes'和NSMutableAttributedString扩展名:

    import SwiftyAttributes
    
    extension NSMutableAttributedString {
        func withParagraphStyle(from attrString: NSAttributedString?) -> NSMutableAttributedString {
            guard let attrString = attrString, let pStyle = attrString.attribute(.paragraphStyle, at: 0) else {
                return self
            }
    
            return self.withAttribute(pStyle)
        }
    }
    

    代码将是:

        let text = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book."
    
        label.attributedText = text.withAttributes([
                .font(.systemFont(ofSize: 20.0)),
                .textColor(.orange)
            ]).withParagraphStyle(from: label.attributedText)