【问题标题】:Scrolling a NSScrollView not working滚动 NSScrollView 不起作用
【发布时间】:2014-02-18 07:23:05
【问题描述】:

我正在尝试使用以下代码将 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

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

如果我滚动到视图的任何部分,下次它收到更新(触发它跳回底部)时,它看起来好像什么也没发生,直到你尝试滚动,这再次导致它跳转返回页面底部。

提前致谢。

【问题讨论】:

  • 听起来像是在不需要的时间触发了一些滚动代码。如果我理解正确,当您尝试手动滚动时它会自动滚动?
  • 你从哪里调用这个代码?
  • @Flexicoder 我从一个单独的线程调用代码
  • @Volker 它在我想要的时候滚动,除了屏幕没有反映滚动视图的新“位置”

标签: objective-c cocoa nstextview nsscrollview


【解决方案1】:

您需要滚动剪辑视图而不是文档视图。
文档视图填充整个滚动视图,而剪辑视图是一种覆盖层,可以滚动决定哪些部分是可见的。

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

注意 scrollToPoint 而不是 NSView 支持的层 scrollPoint 滚动 NSClipView 后,最好的做法是反射滚动ClipView,以便滚动条更新。

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

【讨论】:

    猜你喜欢
    • 2016-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多