4

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

有任何想法吗?

4

1 回答 1

2

我在恢复滚动位置时遇到了类似的问题。对我来说,解决方案是在更改可见矩形之前强制文本视图布局:

[textView.layoutManager ensureLayoutForTextContainer:textView.textContainer];
于 2017-06-22T16:46:28.143 回答