Как изменить промежуток между строками (межстрочный интервал) в многострочном UILabel?
Установить интервал между UILabel
Ответ 1
Изменить: Очевидно, что NSAttributedString сделает это, на iOS 6 и более поздних версиях. Вместо того, чтобы использовать NSString для установки текста ярлыка, создайте NSAttributedString, установите для него атрибуты, затем установите его как .attributedText на ярлыке. Код, который вы хотите, будет примерно таким:
NSMutableAttributedString* attrString = [[NSMutableAttributedString alloc] initWithString:@"Sample text"];
NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
[style setLineSpacing:24];
[attrString addAttribute:NSParagraphStyleAttributeName
value:style
range:NSMakeRange(0, strLength)];
uiLabel.attributedText = attrString;
NSAttributedString old attribitedStringWithString сделал то же самое, но теперь это устарело.
По историческим причинам, здесь мой оригинальный ответ:
Короткий ответ: вы не можете. Чтобы изменить интервал между строками текста, вам придется подклассировать UILabel и перевернуть свой собственный drawTextInRect, создать несколько меток или использовать другой шрифт (возможно, отредактированный для определенной высоты строки, см. Ответ Phillipe).
Длинный ответ: В мире печати и онлайн пространство между строками текста называется "ведущим" (рифмается с "заголовком" и происходит от свинцового металла, использованного несколько десятилетий назад). Leading - это свойство только для чтения UIFont, которое устарело в 4.0 и заменено на lineHeight. Насколько я знаю, нет способа создать шрифт с определенным набором параметров, таких как lineHeight; вы получаете системные шрифты и любой пользовательский шрифт, который вы добавляете, но не можете их настроить после установки.
В UILabel нет параметра интервала.
Я не особенно доволен поведением UILabel как есть, поэтому я предлагаю писать свой собственный подкласс или использовать стороннюю библиотеку. Это сделает поведение, не зависящее от вашего выбора шрифта, и будет самым многоразовым решением.
Мне жаль, что в UILabel не было большей гибкости, и я был бы счастлив, если бы оказался ошибочным!
Ответ 2
Начиная с ios 6 вы можете установить атрибутную строку в UILabel:
NSString *labelText = @"some text";
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:labelText];
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
[paragraphStyle setLineSpacing:40];
[attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [labelText length])];
cell.label.attributedText = attributedString ;
Ответ 3
Вы можете контролировать межстрочный интервал в раскадровке:

Ответ 4
Мое решение состояло в том, чтобы исправить файл шрифта и точно определить его высоту строки. http://mbauman.net/geek/2009/03/15/minor-truetype-font-editing-on-a-mac/
Мне пришлось изменить "lineGap", "ascender", "descender" в блоке "hhea" (как в примере с блогами).
Ответ 5
Этот парень создал класс, чтобы получить высоту строки (без использования CoreText, как библиотеки MTLabel): https://github.com/LemonCake/MSLabel
Ответ 6
Лучшее, что я нашел, это: https://github.com/mattt/TTTAttributedLabel
Это подкласс UILabel, поэтому вы можете просто его вставить, а затем изменить высоту строки:
myLabel.lineHeightMultiple = 0.85;
myLabel.leading = 2;
Ответ 7
Из конструктора интерфейса:

Программный:
SWift 4
Использование расширения ярлыков
extension UILabel {
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 = "How to\ncontrol\nthe\nline spacing\nin UILabel"
// 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 = "Set\nUILabel\nline\nspacing"
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
Swift 3
let label = UILabel()
let stringValue = "Set\nUILabel\nline\nspacing"
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
attrString.addAttribute(NSParagraphStyleAttributeName, value: style, range: NSRange(location: 0, length: stringValue.characters.count))
label.attributedText = attrString
Ответ 8
Я нашел сторонние библиотеки, как этот:
https://github.com/Tuszy/MTLabel
Быть самым простым решением.
Ответ 9
Вот вам быстрый код для установки программных программных интервалов
let label = UILabel()
let attributedText = NSMutableAttributedString(string: "Your string")
let paragraphStyle = NSMutableParagraphStyle()
//SET THIS:
paragraphStyle.lineSpacing = 4
//OR SET THIS:
paragraphStyle.lineHeightMultiple = 4
//Or set both :)
let range = NSMakeRange(0, attributedText.length)
attributedText.addAttributes([NSParagraphStyleAttributeName : paragraphStyle], range: range)
label.attributedText = attributedText
Ответ 10
Конечно, ответ Майка не работает, если вы передаете строку программно. В этом случае вам нужно передать атрибутную строку и изменить ее стиль.
NSMutableAttributedString * attrString = [[NSMutableAttributedString alloc] initWithString:@"Your \nregular \nstring"];
NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
[style setLineSpacing:4];
[attrString addAttribute:NSParagraphStyleAttributeName
value:style
range:NSMakeRange(0, attrString.length)];
_label.attributedText = attrString;