UITextView用于大型属性字符串的滚动性能

时间:2015-12-10 09:35:21

标签: uitextview nsattributedstring textkit

使用属性字符串时,如何改进UITextView的滚动性能?以下示例代码在iPad 3上导致完全无法接受的性能。

NSMutableParagraphStyle *pStyle = [[NSMutableParagraphStyle alloc] init];
pStyle.lineSpacing = 14.0;
pStyle.lineHeightMultiple = 20;
pStyle.maximumLineHeight = 20.0;
pStyle.minimumLineHeight = 20.0;
UIFont *font = [UIFont systemFontOfSize:20.0];
NSDictionary *attributes = @{ NSFontAttributeName : font, NSParagraphStyleAttributeName : pStyle};

NSMutableAttributedString *newline = [[NSMutableAttributedString alloc] initWithString:@"\n\n"];
NSMutableAttributedString *string  = [[NSMutableAttributedString alloc] initWithString:@"" attributes:@{}];

for (int paragraph=0; paragraph<300; paragraph++){
    for (int word=0; word<100; word++){
        [string appendAttributedString:[[NSAttributedString alloc] initWithString:@"text!"]];
    }
    [string appendAttributedString:newline];
}

[string setAttributes:attributes range:NSMakeRange(0, string.length)];

self.textView.attributedText = string;

我应该提一下,我愿意使用Text Kit,但我不知道从哪里开始确保性能最终确定。此外,这是滚动时在分析器中发生的事情。

Profiler

1 个答案:

答案 0 :(得分:2)

这里有两件事有帮助。

  1. 首先,我只需要lineSpacing样式集。设置任何其他段落参数会导致慢速滚动。

  2. 第二个是在[self.textView.layoutManager ensureLayoutForCharacterRange:NSMakeRange(0, self.textView.attributedText.length)];中致电viewDidAppear:。否则,当您第一次滚动文档时,它会生涩。