添加双线中断而不是一个

时间:2013-01-15 13:27:53

标签: ios objective-c nsstring core-text

我在字符串中添加了一个新行,如下所示:

unichar newLineChar = NSNewLineCharacter;
NSString *newLineCharAsStr = [NSString stringWithCharacters:&newLineChar length:1];
NSString * newLine = [[NSString alloc] initWithString: newLineCharAsStr];
[finalString appendString: newLine];

但是在Core Text中呈现的结果给了我两个换行符。即两个文本块之间的空行。我只想终止一行并在新行上开始下一行(即没有空行)。

如果我删除了appendString,那么文本会连续流动(即没有添加中断),所以我可以确认我没有意外地添加两次换行符。我还尝试了NSCarriageReturnCharacterNSLineSeparatorCharacterNSParagraphSeparatorCharacter以及\r\n,但这种情况在所有情况下都会发生。

我觉得我可能在找错了地方,但是有人可以帮忙吗?

更新:我从下面提供的一个链接中收集了Core Text 中的'\ n'结尾一个段落,在当前行下方插入换行符。这可以解释为什么总是插入换行符。所以我想精确的问题是,Core Text中的内容只会破坏一行而不是插入段落?即期望的结果是

第1行。
第2行。

而不是:

第1行。

第2行。

这是我目前所得到的。

2 个答案:

答案 0 :(得分:0)

检查此代码:

在第3行中,我使用的是newLineChar而不是paraChar

NSMutableString *finalString=[[NSMutableString alloc]initWithString:@"hi all"];

unichar newLineChar = '\n';    
NSString *newLineCharAsStr = [NSString stringWithCharacters:&newLineChar length:1];
NSString * newLine = [[NSString alloc] initWithString: newLineCharAsStr];
[finalString appendString: newLine];

[finalString appendString:@"bye now"];

 NSLog(@"==>%@",finalString);

答案 1 :(得分:0)

这确实是Define Core Text paragraphs without using newline character?的变体答案,正如trojanfoe建议的那样。没有办法强制Core Text将新的行字符视为一个段落,而不是段落。

因此,缩小段落间距以便'\ n'仅打破行的唯一方法是将Core Text段落属性中的'kCTParagraphStyleSpecifierParagraphSpacing'和'kCTParagraphStyleSpecifierParagraphSpacingBefore'设置为0.0,这就是我所做的 - 所有现在看起来很棒。