滚动NSTextView使滚动条处于错误的位置

时间:2011-11-10 18:29:44

标签: cocoa scroll scrollbar osx-lion nsscrollview

我在NSScrollView中有一个NSTextView。我将文本放在NSTextView中并以编程方式将其滚动到底部,这可以正常工作,但滚动条保持在顶部。使用鼠标定位滚动条会使其跳转到它所属的底部,从那时起它可以正常运行。

我的代码:

textView.string = s;
[textView scrollToEndOfDocument:self];

不要挂在scrollToEndOfDocument方法上 - 我也尝试过:

[textView scrollRangeToVisible:NSMakeRange(s.length, 0)];

[[scrollViewText contentView] scrollToPoint:NSMakePoint(0, textView.frame.size.height)];
[scrollViewText reflectScrolledClipView:[scrollViewText contentView]];

完全相同的问题,如下所示:

Scroll bar in wrong position.

我通过添加一行来解决问题:

textView.string = s;
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate distantPast]];
[textView scrollToEndOfDocument:self];

不应该运行runUntilDate调用。我的理论是,它让NSScrollView有机会以某种方式赶上并同步自己。

这一切都在Lion上。我尝试将系统偏好设置为Lion" backwards"滚动和传统的前狮子滚动,结果相同。

关于:

的任何想法
  1. 为什么我添加的电话有帮助,
  2. 如果没有那个电话就能让它工作?

1 个答案:

答案 0 :(得分:3)

尝试NSScrollView的reflectScrolledClipView:

编辑:如何更换 [[scrollViewText contentView] scrollToPoint:NSMakePoint(0, textView.frame.size.height)];

[scrollView.contentView scrollToPoint:NSMakePoint(0, scrollView.documentView.frame.size.height-scrollView.contentSize.height)];

因为我认为你正在滚动浏览文档视图的框架。