Mat*_*att 7 scroll nslayoutmanager nstextview
我希望能够保存 NSTextView 的当前文本和可见区域并恢复它。使用visibleRect和scrollRectToVisible:似乎会产生不一致的结果。如果我只是这样做:
- (void)restorePosition
{
NSRect r = [self.textView visibleRect];
[self.textView.layoutManager replaceTextStorage: self.textView.textStorage];
[self.textView scrollRectToVisible: r];
}
Run Code Online (Sandbox Code Playgroud)
当视图距离顶部不到 85 行时,视图将保持在原位,但我走得越远,它就会变得越远。从顶部开始 200 行,最终为 277,在 300 行,最终为 408,依此类推。
如果没有replaceTextStorage,它也可以按预期工作,但替换文本并找到以前的位置才是重点。替换文本的某些问题会导致线矩形计算变得不稳定。
显然,我计划从实际应用程序中保存的对象获取新的visibleRect和textStorage,但这说明了最少代码的问题。
有任何想法吗?
我在恢复滚动位置方面遇到了类似的问题。对我来说,解决方案是在更改可见矩形之前强制文本视图布局:
[textView.layoutManager ensureLayoutForTextContainer:textView.textContainer];
Run Code Online (Sandbox Code Playgroud)