我有一个包含大量文本的 UITextView。iPhone 4、5 和 6 上的滚动大部分都很流畅,但在 6 Plus 上却有很多卡顿。(我相信这是因为 6 Plus 对于它必须推动的像素数量而言动力不足)。我注意到,一旦我滚动过一个区域,如果我在它上面滚动,滚动就会很流畅;该区域已经进行了布局,处理器不需要做太多事情。我想在到达该地区之前强制进行布局。这是我尝试过的:
textView.layoutManager.ensureLayoutForTextContainer(textView.textContainer)
这似乎根本没有做任何事情。在第一次通过区域时滚动仍然不平滑,并且前后日志语句的差异为 0.00014 秒。为了确保我真的得到了正确的文本容器,我还尝试了:
textView.layoutManager.ensureLayoutForTextContainer(textView.layoutManager.textContainers[0] as NSTextContainer)
这也没什么区别。
我需要做什么来强制布局文本容器中的所有文本?
任何帮助将不胜感激。
谢谢。
编辑添加:回答 TheCodingArt 的问题:就布局管理器而言,我没有做任何异国情调的事情。这是我的设置代码:
var textStorage = NSTextStorage()
var layoutManager = NSLayoutManager()
textStorage.addLayoutManager(layoutManager)
var textContainer = NSTextContainer(size: textContainerSize)
layoutManager.addTextContainer(textContainer)
textView = UITextView(frame: CGRectMake(0, 0, textViewWidth, textViewHeight), textContainer: textContainer)
textView.showsHorizontalScrollIndicator = false
textView.showsVerticalScrollIndicator = false
textView.backgroundColor = UIColor.clearColor();
textView.editable = false;
textView.selectable = true;
textView.scrollsToTop = false
self.view.addSubview(textView)
显式实例化和添加文本容器和文本存储是我从这个问题的第一个答案中学到的: Scroll to bottom of UITextView erratic in iOS 7 ...这确实有所帮助,但对于 6 Plus 来说还不够。
后来,我向其中添加了文本:
textStorage.appendAttributedString(attribStr)