2014-02-18 132 views
0

我试图滚动的NSScrollView使用此代码视图的底部:滚动NSScrollView不工作

NSPoint newScrollOrigin; 
if ([[self.chatScreen documentView] isFlipped]) { 
    newScrollOrigin=NSMakePoint(0.0,NSMaxY([[self.chatScreen documentView] frame])-NSHeight([[self.chatScreen contentView] bounds])); 
} else { 
    newScrollOrigin=NSMakePoint(0.0,0.0); 
} 
self.chatScreen.backgroundColor=[NSColor redColor]; 
[[self.chatScreen documentView] scrollPoint:newScrollOrigin]; 

这些来自这里:Apple doucmentation on scrolling

当我运行我的程序,它部分滚动到视图的底部,屏幕显示视图的顶部(默认开始位置),但当我尝试滚动时,它跳转到页面的底部,然后我可以正常滚动。

如果我滚动到视图的任何部分,下一次它接收到更新(触发它跳回到底部),看起来没有任何事情发生,直到您尝试滚动,这再次导致它跳回到页面的底部。

在此先感谢。

+0

听起来像一些滚动代码是在不需要的时间触发的。如果我理解正确,当您尝试手动滚动时它会自动滚动? – Volker

+0

你从哪里调用此代码? – Flexicoder

+0

@Flexicoder我从一个单独的线程调用代码 – Alex

回答

0

您需要滚动剪辑视图而不是文档视图。
文档视图填充了整个滚动视图和剪辑视图是一种叠加层,它围绕着决定哪些部分可见。

[[self.chatScreen contentView] scrollToPoint:newScrollOrigin]; 

通知的scrollToPoint,而不是一个NSView的层支持scrollPoint 后您滚动NSClipView它总是好的做法reflectScrolledClipView从而使滚动条更新。

- (void)reflectScrolledClipView:(NSClipView *)aClipView;