Одна вещь, о которой я не упоминал в вопросе, который, как я думал, был очевидным из примера, состоит в том, что описание не входит в мой контроль, оно генерируется пользователями. Поэтому символы возврата каретки добавляются ими при создании текста.
Так что решение я придумал следующий:
Во-первых, я заменяет \ п \ п символов с одного возврата каретки. Это было вызвано ответом амин-негам-ада. \ n \ n не является желательным способом создания пространства абзаца.
Я делаю это с помощью следующего куска кода:
func sanitize() -> String {
var output = NSMutableString(string: self)
var numberOfReplacements = 0
do {
let range = NSMakeRange(0, output.length)
numberOfReplacements = newString.replaceOccurrencesOfString("\n\n", withString: "\n", options: NSStringCompareOptions.CaseInsensitiveSearch, range: range)
} while (numberOfReplacements > 0)
return output as String
}
Следующая часть, чтобы применить стиль абзаца с приписываемой строки. Вот пример функции, которая является достаточно гибкой:
func textAttributesWithFont(font: UIFont, andColor color: UIColor,
lineSpacing: CGFloat = 0,
maximumLineHeight: CGFloat = 0,
textAlignment: NSTextAlignment = .Natural) -> [NSObject: AnyObject] {
var attributes = [NSFontAttributeName : font, NSForegroundColorAttributeName : color]
var paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.lineSpacing = lineSpacing
paragraphStyle.alignment = textAlignment
paragraphStyle.maximumLineHeight = maximumLineHeight
paragraphStyle.paragraphSpacing = 4
attributes[NSParagraphStyleAttributeName] = paragraphStyle
return attributes
}
Наконец метка строится с помощью атрибутов:
var label1 = UILabel()
let text1 = "This is a test that is supposed to wrap with some paragaphs\n\nThis is a paragraph"
label1.attributedText = NSAttributedString(string:sanitizeComment(text1), attributes: attributes)
label1.numberOfLines = 0
я предположил бы, что вам нужно указать второй '\ n' другим шрифтом размер, таким образом, новая строка не будет такой высокой - я быстро ее попробую ... – luk2302
Почему бы не заменить '\ n \ n' на' \ n'? – Bannings
@Bannings таким образом не было бы никакого пространства между линиями, кроме межстрочного интервала – luk2302