我希望能够保存 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 ,但这说明了最少代码的问题。
有任何想法吗?