2015-05-31 3 views
1

Возможно ли ограничить расстояние между абзацами, которые были созданы с использованием \n\n меньше в UILabel с использованием атрибутированных строк?Изменение высоты абзаца (не межстрочного интервала) в UILabel

Так, например, я хотел бы это: enter image description here

Чтобы выглядеть следующим образом:

enter image description here

ли это предполагает заменить \ п \ п с чем-то еще? Или существует гораздо более простое решение с использованием NSAttributedString?

+0

я предположил бы, что вам нужно указать второй '\ n' другим шрифтом размер, таким образом, новая строка не будет такой высокой - я быстро ее попробую ... – luk2302

+0

Почему бы не заменить '\ n \ n' на' \ n'? – Bannings

+0

@Bannings таким образом не было бы никакого пространства между линиями, кроме межстрочного интервала – luk2302

ответ

-1

Одна вещь, о которой я не упоминал в вопросе, который, как я думал, был очевидным из примера, состоит в том, что описание не входит в мой контроль, оно генерируется пользователями. Поэтому символы возврата каретки добавляются ими при создании текста.

Так что решение я придумал следующий:

Во-первых, я заменяет \ п \ п символов с одного возврата каретки. Это было вызвано ответом амин-негам-ада. \ 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 
0

Решение, изложенное в моем комментарии, работает. Вы можете установить размер шрифта отбивки пустой строки/пункт как-то, что радует глаз:

Следующий код находит все вхождения \n\n и указать вторую, чтобы иметь определенный размер:

unsigned long length = myAttributedString.length; 
NSRange range = NSMakeRange(0, length); 
NSRange found; 
while (NSNotFound != (found =[myAttributedString.string rangeOfString:@"\n\n" options:0 range:range]).location) { 
    [myAttributedString addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:8.0] range:NSMakeRange(found.location + 1, 1)]; 
    range = NSMakeRange(found.location + 2, length - found.location - 2); 
} 
+0

Mhmhmhmhmmm, мне нравятся пустые голоса без причины. – luk2302

+0

Мы все делаем :-(... –

1

Во-первых: использование \n\n для создания расстояний между двумя параграфами не является хорошей идеей. \n имеет смысловое значение нового абзаца, поэтому у вас есть три абзаца, где два семантически означают. Это похоже на дилетантский секретарь, занимающийся паразитами. Вы должны заменить их одним \n.

Однако вы не должны использовать размер шрифта для настройки интервала между линиями или интервала между абзацами. Это сильно зависит от формы шрифта и его определения. Вещи ломаются быстро.

Добавьте стиль абзаца, потому что они построены для интервала между абзацами. Задайте параметры высоты строки или абзаца.

Смежные вопросы