Відповіді:
Редагувати: очевидно 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;
Старий attributedStringWithString NSAttributedString в зробив те ж саме, але тепер , що є застарілим.
З історичних причин ось моя оригінальна відповідь:
Коротка відповідь: не можна. Щоб змінити інтервал між рядками тексту, вам доведеться підкласирувати UILabelі прокручувати власні drawTextInRect, створювати кілька міток або використовувати інший шрифт (можливо, один відредагований для певної висоти рядка, див. Відповідь Філіппа).
Довга відповідь: у друкованому та інтернет-світі простір між рядками тексту відомий як "провідний" (римується з "заголовком", і походить від свинцевого металу, який використовувався десятиліттями тому). Ведення - це властивість лише для читання UIFont, яка була застаріла в 4.0 та замінена на lineHeight. Наскільки я знаю, немає способу створити шрифт із певним набором параметрів, таких як lineHeight; ви отримуєте системні шрифти та будь-який спеціальний шрифт, який ви додаєте, але не можете змінити їх після встановлення.
Немає також ніякого параметра інтервалу UILabel.
Я не особливо задоволений UILabelтакою поведінкою, тому пропоную написати свій підклас або використовувати сторонні бібліотеки. Це зробить поведінку незалежною від вашого вибору шрифту та стане найбільш багаторазовим рішенням.
Мені б хотілося, щоб у гнучкості було більше гнучкості UILabel, і я би радий, що я виявив себе неправильним!
Починаючи з 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 ;
AttributedStringвідключення, наприклад, вирівнювання тексту мітки, тому вам доведеться додати його до стилю абзацу.
Від інтерфейсу:

Програмно:
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
Швидкий 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
Моє рішення полягало в тому, щоб виправити сам файл шрифту і точно встановити його висоту рядка. http://mbauman.net/geek/2009/03/15/minor-truetype-font-editing-on-a-mac/
Мені довелося змінити "lineGap", "ascender", "descender" у блоці "hhea" (як у прикладі блогу).
Цей хлопець створив клас для отримання висоти рядка (без використання CoreText, як бібліотеки MTLabel): https://github.com/LemonCake/MSLabel
Найкраще, що я знайшов: https://github.com/mattt/TTTAttributedLabel
Це підклас UILabel, так що ви можете просто вписати його, а потім змінити висоту рядка:
myLabel.lineHeightMultiple = 0.85;
myLabel.leading = 2;
Я знайшов сторонні бібліотеки, як ця:
https://github.com/Tuszy/MTLabel
Щоб було найпростішим рішенням.
Ось декілька швидких кодів для програмного встановлення міжрядкового інтервалу
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
Звичайно, відповідь Майка не працює, якщо ви передаєте рядок програмно. У цьому випадку вам потрібно пройти атрибутивний рядок і змінити його стиль.
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;