同步两个NSScrollView

dis*_*dev 6 macos nsscrollview

我阅读了文档同步滚动视图,并完全按照文档进行操作,但有一个问题.

我想同步NSTableView和NSTextView.首先让NSTableView监视NSTextView,当我滚动TextView时一切正常,但是当我尝试滚动TableView时,我发现TableView将首先跳转到另一个地方(可能是向后几行),然后继续从那个地方滚动.

即使我让TextView监视TableView后,这个问题仍然存在.

有谁知道这是什么问题?我不能同步TableView和TextView?

编辑: 好的,现在我发现TableView将返回到上次滚动后的位置.例如,TableView的第一行是第10行,然后我滚动TextView,现在TableView的第一行是第20行,如果我再次滚动TableView,TableView将首先返回第10行,然后开始滚动.

jmk*_*jmk 3

我刚刚在对一个非常类似的情况(在 Lion 上)进行故障排除时遇到了这个确切的问题。我注意到这只在滚动条隐藏时才会发生——但我验证它们仍然存在于笔尖中,并且仍然正确实例化。

我什至一定要打电话-[NSScrollView reflectScrolledClipView:],但这并没有什么区别。看起来这确实是 NSScrollView 中的一个错误。

无论如何,我能够通过创建自定义滚动器类来解决这个问题。我所要做的就是重写以下类方法:

+ (BOOL)isCompatibleWithOverlayScrollers
{
    // Let this scroller sit on top of the content view, rather than next to it.
    return YES;
}

- (void)setHidden:(BOOL)flag
{
    // Ugly hack: make sure we are always hidden.
    [super setHidden:YES];
}
Run Code Online (Sandbox Code Playgroud)

然后,我允许滚动条在 Interface Builder 中“可见”。然而,由于它们隐藏起来,它们不会出现在屏幕上,用户也无法单击它们。令人惊讶的是,IB 设置和hidden属性并不等同,但从行为中可以清楚地看出它们并不等同。

这不是最好的解决方案,但它是我想到的最简单的解决方法(到目前为止)。