我使用UITextView
来显示一些文字。在列出文本时,我使用enumerateLineFragmentsForGlyphRange:withBlock:
方法枚举文本行。
NSInteger shrunkNumberOfLines = 3;
__block NSMutableString *shortenedText = [NSMutableString new];
__block NSInteger currentLine = 0;
__block BOOL needsTruncation = NO;
[detailsTableViewCell.descriptionTextView.layoutManager enumerateLineFragmentsForGlyphRange:NSMakeRange(0, text.length) usingBlock:^(CGRect rect, CGRect usedRect, NSTextContainer *textContainer, NSRange glyphRange, BOOL *stop) {
if (currentLine < shrunkNumberOfLines) {
NSRange stringRange = ((glyphRange.length + glyphRange.location) <= text.length) ? glyphRange : NSMakeRange(glyphRange.location, (text.length - glyphRange.location));
NSString *appendString = [text substringWithRange:stringRange];
NSLog(@"%@", appendString);
[shortenedText appendString:appendString];
currentLine += 1;
} else {
needsTruncation = YES;
*stop = YES;
}
}];
但是,我遇到了一个奇怪的错误:通常情况下,在textview中显示的文本与我在appendString
中看到的文本不一致。
例如,文本字段中的文字可能会出现如下内容:
President Obama offered a
blueprint for deeper American
engagement in the Middle East.
...但是看看我的NSLog语句,那些appendStrings就像是:
President Obama offered a blu
eprint for deeper American en
gagement in the Middle East.
我尝试了很多东西 - 与hyphenationFactor
一起玩,确保textContainerInsets
是正确的等等 - 但我无法解决这个问题。在enumerateLineFragmentsForGlyphRange:withBlock:
方法中导致无效换行的原因是什么?