右对齐的 NSAttributedString 删除末尾的空格
NSAttributedString with right alignment removes whitespace at the end
我创建了一个简单的聊天应用程序,其中我们的消息位于右侧(右对齐),所有其他消息位于左侧(左对齐)。我正在使用 NSAttributedString
因为我用颜色等大量修改了文本。
每条消息都是一个 UILabel。我的问题是,在正确对齐的消息末尾,我想放一个白色的space,所以它看起来像这样:
"Some example sentence "
而不是这样:
"Some example sentece"
每次我把白色space放在那里时它都会被删除(我也尝试过不间断的space \u00a0
但我遇到了同样的问题(space 已移除)
我的右对齐代码如下所示:
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])];
稍后我添加了一些其他的颜色等属性(没有改变文本本身)。文本总是在末尾带有白色 space,如下所示:"Some example sentece "
最后我做了这样的事情:
self.attributedText = attributedString;
还有...我的 space 被删除了。如何防止我的文本最后删除白色space?我需要它。
编辑:
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 代码,它的作用如下所示。
我在聊天的右侧有一条消息 "test"(这里是左侧,因为我不知道如何右对齐文本 :P)
在 tailIndent 之前:
test
tailIndent 之后:
t
那么会发生什么:在这种情况下,文本从右到左只留下最后一个字符。而 tailIndent 仅为 0.1
!
我自己尝试了几个值,并且,与属性名称设置的预期相反(并且缺乏其他指导in the doc),tailIndent
必须为负数。
这是没有设置属性的代码(基本上是 OP):
NSString *text = @"Am I indented?";
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:text];
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
[paragraphStyle setAlignment:NSTextAlignmentRight];
// paragraphStyle.tailIndent = -18.0;
[attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [attributedString length])];
self.label.attributedText = attributedString;
取消注释行设置 tailIndent
为 negative 值,您将得到:
编辑
任何控制参数都应表示为对象,例如表示缩进的 NSNumber:
NSNumber *theIndent = @(-18);
// then, later:
paragraphStyle.tailIndent = [theIndent intValue];
只有像NSNumbers这样的对象可以放在数组、字典、核心数据等中
我创建了一个简单的聊天应用程序,其中我们的消息位于右侧(右对齐),所有其他消息位于左侧(左对齐)。我正在使用 NSAttributedString
因为我用颜色等大量修改了文本。
每条消息都是一个 UILabel。我的问题是,在正确对齐的消息末尾,我想放一个白色的space,所以它看起来像这样:
"Some example sentence "
而不是这样:
"Some example sentece"
每次我把白色space放在那里时它都会被删除(我也尝试过不间断的space \u00a0
但我遇到了同样的问题(space 已移除)
我的右对齐代码如下所示:
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])];
稍后我添加了一些其他的颜色等属性(没有改变文本本身)。文本总是在末尾带有白色 space,如下所示:"Some example sentece "
最后我做了这样的事情:
self.attributedText = attributedString;
还有...我的 space 被删除了。如何防止我的文本最后删除白色space?我需要它。
编辑:
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 代码,它的作用如下所示。 我在聊天的右侧有一条消息 "test"(这里是左侧,因为我不知道如何右对齐文本 :P) 在 tailIndent 之前:
test
tailIndent 之后:
t
那么会发生什么:在这种情况下,文本从右到左只留下最后一个字符。而 tailIndent 仅为 0.1
!
我自己尝试了几个值,并且,与属性名称设置的预期相反(并且缺乏其他指导in the doc),tailIndent
必须为负数。
这是没有设置属性的代码(基本上是 OP):
NSString *text = @"Am I indented?";
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:text];
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
[paragraphStyle setAlignment:NSTextAlignmentRight];
// paragraphStyle.tailIndent = -18.0;
[attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [attributedString length])];
self.label.attributedText = attributedString;
取消注释行设置 tailIndent
为 negative 值,您将得到:
编辑 任何控制参数都应表示为对象,例如表示缩进的 NSNumber:
NSNumber *theIndent = @(-18);
// then, later:
paragraphStyle.tailIndent = [theIndent intValue];
只有像NSNumbers这样的对象可以放在数组、字典、核心数据等中