Как контролировать межстрочный интервал в UILabel - PullRequest
242 голосов
/ 31 марта 2011

Можно ли уменьшить разрыв между текстом, если поместить его в несколько строк в UILabel? Мы можем установить рамку, размер шрифта и количество строк. Я хочу уменьшить разрыв между двумя строками на этом ярлыке.

Ответы [ 22 ]

0 голосов
/ 29 августа 2018

Вот мое решение по-быстрому.Подкласс должен работать как для атрибута attributeText и text, так и для characterSpacing + lineSpacing.Он сохраняет интервал, если установлена ​​новая строка или attributeString.

open class UHBCustomLabel : UILabel {
    @IBInspectable open var characterSpacing:CGFloat = 1 {
        didSet {
            updateWithSpacing()
        }

    }
    @IBInspectable open var lines_spacing:CGFloat = -1 {
        didSet {
            updateWithSpacing()
        }

    }
    open override var text: String? {
        set {
            super.text = newValue
            updateWithSpacing()
        }
        get {
            return super.text
        }
    }
    open override var attributedText: NSAttributedString? {
        set {
            super.attributedText = newValue
            updateWithSpacing() 
        }
        get {
            return super.attributedText
        }
    }
    func updateWithSpacing() {
        let attributedString = self.attributedText == nil ? NSMutableAttributedString(string: self.text ?? "") : NSMutableAttributedString(attributedString: attributedText!)
        attributedString.addAttribute(NSKernAttributeName, value: self.characterSpacing, range: NSRange(location: 0, length: attributedString.length))
        if lines_spacing >= 0 {
            let paragraphStyle = NSMutableParagraphStyle()
            paragraphStyle.lineSpacing = lines_spacing
            paragraphStyle.alignment = textAlignment
            attributedString.addAttribute(NSParagraphStyleAttributeName, value:paragraphStyle, range:NSMakeRange(0, attributedString.length))
        }
        super.attributedText = attributedString
    }
}
0 голосов
/ 28 июля 2016

Как быстро-грязный-умный-простой обходной путь:

Для UILabels, у которых мало строк, вместо этого можно использовать stackViews.

  1. Для каждой строки напишите новую метку.
  2. Вставить их в StackView. (Выберите обе метки -> Редактор -> Вставить -> StackView
  3. Настройте Spacing StackView на желаемое количество

Обязательно сложите их по вертикали . Это решение также работает для пользовательских шрифтов.

enter image description here

...