Я создал простое приложение для чата, где наши сообщения находятся с правой стороны (выравнивание по правому краю), а все остальные сообщения находятся слева (выравнивание по левому краю). Я использую NSAttributedString
, потому что я сильно изменяю текст с цветами и т. Д. Каждое сообщение является UILabel. Моя проблема заключается в том, что в конце сообщения с выравниванием по правому краю, я хочу поставить пробел так это выглядит следующим образом:NSAttributedString с правильным выравниванием удаляет пробелы в конце
"Some example sentence "
и не нравится:
"Some example sentece"
и он удален каждый раз я поставить пробел там (я также попытался с неразрывного пробелом \u00a0
и я получаю ту же проблему (пространство удаляется) Мой код для правильного выравнивания выглядит следующим образом:
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:self.text /*attributes:attrDict*/];
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
[paragraphStyle setAlignment:NSTextAlignmentRight];
[attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [attributedString length])];
позже Я добавляю некоторые другие атрибуты с цветами и т. Д. (Ничего не меняет сам текст). Текст всегда с пробелом в конце, как это: "Some example sentece "
и в конце концов я сделать что-то вроде этого:
self.attributedText = attributedString;
И ... мое место удаляется. Как я могу предотвратить удаление текста в конце текста? Мне это нужно.
EDIT:
if (self.textAlignment == NSTextAlignmentRight) {
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
[paragraphStyle setAlignment:NSTextAlignmentRight];
[paragraphStyle setTailIndent:0.1];
[attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [attributedString length])];
}
Это мой код для tailIndent и что он делает, выглядит так. У меня есть сообщение «тест» на правой стороне чата (здесь он находится на левой, потому что я не знаю, как право выровнять текст: P) перед тем tailIndent:
тест
после tailIndent:
т
Так что же происходит: текст идет от RIGH t налево, оставляя в этом случае только последний символ. И tailIndent только 0.1
!
Как вы можете сказать, что пробелы удалены? – danh
@ danh текст записывается прямо на краю метки, между правым краем метки и текстом нет пробелов. И если что-то я не занят в заполнении;) Мне нужно пробел там – L3M0L
Я думаю, что стиль абзаца предоставляет tailIndent. Вы попробовали это? – danh