Why appendAttributedString show appended string in a new line?
nsattributedstring, objective-c
Solution
From my own experiences, when you set the `attributedText` property of `UITextView`, the text is getting a newline added to it. So when you later retrieve the `attributedText` from the `UITextView`, this newline is at the end of the text. So when you append more text, the newline is in the middle (and another one is added to the end).
I don't know if this is a bug in `UITextView` or possibly `NSAttributedString`.
One workaround would be to update your code as follows:
- (void)appendText:(NSString*)text {
NSMutableAttributedString *originalText = [[NSMutableAttributedString alloc] initWithAttributedString:_textView.attributedText];
// Remove any trailing newline
if (originalText.length) {
NSAttributedString *last = [originalText attributedSubstringFromRange:NSMakeRange(originalText.length - 1, 1)];
if ([[last string] isEqualToString:@"\n"]) {
originalText = [originalText attributedSubstringFromRange:NSMakeRange(0, originalText.length - 1)];
}
}
NSAttributedString *appendText = [[NSAttributedString alloc] initWithString:text attributes:@{NSForegroundColorAttributeName:DefaultTextColor}];
[originalText appendAttributedString:appendText];
_textView.attributedText = originalText;
}
Problem
For example, I have 3 sentences such as @"Long long ago.",@"There is a child.",@"bla bla bla" And I made a method below ``` - (void)appendText:(NSString*)text { NSMutableAttributedString *originalText = [[NSMutableAttributedString alloc] initWithAttributedString:_textView.attributedText]; NSAttributedString *appendText = [[NSAttributedString alloc] initWithString:text attributes:@{NSForegroundColorAttributeName:DefaultTextColor}]; [originalText appendAttributedString:appendText]; _textView.attributedText = originalText; } ``` So I invoked appendText 3 times ``` [self appendText:@"Long long ago."]; [self appendText:@"There is a child."]; [self appendText:@"bla bla bla."]; ``` The result I expected is ``` Long long ago.There is a child.bla bla bla. ``` But the output is ``` Long long ago. There is a child. bla bla bla ``` Why appendAttributedString show appended string in a new line? How can I put the appended text in one paragraph? Thanks for any help.