Можно ли установить расстояние UILabel между линией? - PullRequest
4 голосов
/ 30 апреля 2009

Можно ли установить расстояние UILabel между строкой, так как у меня UILabel содержал 3 строки, а linebreakmode - wordwrap?

Ответы [ 2 ]

6 голосов
/ 17 июня 2010

Если вы имеете в виду «ведущий», который относится к разрыву между строками типа - вы не можете изменить это на UILabel. Это выводится из передней части самого ярлыка. Некоторые люди пытались создать категории, чтобы переопределить «ведущее» свойство UIFont для метки, но оно фактически не работает при рендеринге.

Если вам действительно нужно контролировать расстояние по вертикали между строками текста, то лучше всего программно сбросить 1 UILabel на строку фиксированной ширины и самостоятельно контролировать вертикальный разрыв.

0 голосов
/ 12 октября 2017

Вот как вы можете установить межстрочный интервал, используя построитель интерфейса, а также программно.

Из Interface Builder:

enter image description here

Программный:

SWift 4

Использование расширения метки

extension UILabel {

    // Pass value for any one of both parameters and see result
    func setLineSpacing(lineSpacing: CGFloat = 0.0, lineHeightMultiple: CGFloat = 0.0) {

        guard let labelText = self.text else { return }

        let paragraphStyle = NSMutableParagraphStyle()
        paragraphStyle.lineSpacing = lineSpacing
        paragraphStyle.lineHeightMultiple = lineHeightMultiple

        let attributedString:NSMutableAttributedString
        if let labelattributedText = self.attributedText {
            attributedString = NSMutableAttributedString(attributedString: labelattributedText)
        } else {
            attributedString = NSMutableAttributedString(string: labelText)
        }

        // Line spacing attribute
        attributedString.addAttribute(NSAttributedStringKey.paragraphStyle, value:paragraphStyle, range:NSMakeRange(0, attributedString.length))

        self.attributedText = attributedString
    }
}

Теперь вызовите функцию расширения

let label = UILabel()
let stringValue = "is\nit\npossible\nto\nset\nthe\nUILabel\ndistance\nbetween\nthe\nline?"

// Pass value for any one argument - lineSpacing or lineHeightMultiple
label.setLineSpacing(lineSpacing: 2.0) .  // try values 1.0 to 5.0

// or try lineHeightMultiple
//label.setLineSpacing(lineHeightMultiple = 2.0) // try values 0.5 to 2.0

Или используя экземпляр метки (просто скопируйте и выполните этот код, чтобы увидеть результат)

let label = UILabel()
let stringValue = "is\nit\npossible\nto\nset\nthe\nUILabel\ndistance\nbetween\nthe\nline?"
let attrString = NSMutableAttributedString(string: stringValue)
var style = NSMutableParagraphStyle()
style.lineSpacing = 24 // change line spacing between paragraph like 36 or 48
style.minimumLineHeight = 20 // change line spacing between each line like 30 or 40

// Line spacing attribute
attrString.addAttribute(NSAttributedStringKey.paragraphStyle, value: style, range: NSRange(location: 0, length: stringValue.characters.count))

// Character spacing attribute
attrString.addAttribute(NSAttributedStringKey.kern, value: 2, range: NSMakeRange(0, attrString.length))

label.attributedText = attrString
...