我希望能够保存NSTextView的当前文本和可见区域并将其还原。使用visibleRect和scrollRectToVisible:似乎会产生不一致的结果。如果我这样做:
- (void)restorePosition
{
NSRect r = [self.textView visibleRect];
[self.textView.layoutManager replaceTextStorage: self.textView.textStorage];
[self.textView scrollRectToVisible: r];
}
当视图位于距离顶部少于85行的位置时,视图将保持在适当的位置,但是越往下走越远。在距离顶部200行处,它最终在277处,在300处,最终在408处等。
如果没有replaceTextStorage,它也会按预期工作,但替换文本并找到上一个位置就是重点。关于替换文本的事情导致线矩形计算变得不稳定。
显然我打算从真实应用中的已保存对象中获取新的visibleRect和textStorage,但这说明了最小代码的问题。
有什么想法吗?
答案 0 :(得分:1)
我遇到了与恢复滚动位置相关的类似问题。对我来说,解决方案是在更改可见的rect之前强制文本视图进行布局:
[textView.layoutManager ensureLayoutForTextContainer:textView.textContainer];