如何禁用NSScrollView的垂直滚动



如何禁用NSScrollView的垂直滚动?

我在谷歌上找不到快速的解决方案。

感谢

在NSCrollView子类中尝试此操作:

- (void)scrollWheel:(NSEvent *)theEvent
{
    [super scrollWheel:theEvent];
    if ([theEvent deltaY] != 0.0)
    {
        [[self nextResponder] scrollWheel:theEvent];
    }
}

您也可以通过以下方式登录:

NSLog(@"user scrolled %f horizontally and %f vertically", [theEvent deltaX], [theEvent deltaY]);

我喜欢Ivan上面的回答。然而,在我的特定情况下,我有一个表视图(垂直滚动),其中每一行都包含一个集合视图(水平滚动)。

当用户试图向上/向下滚动时,如果鼠标悬停在某个集合视图上,他们将无法向上或向下滚动。

为了解决这个问题,我对包含NSCollectionViews的NSCrollView进行了子类化,并用以下代码重写了这个方法:

override func scrollWheel(with event: NSEvent)
{
    if (fabs(Double(event.deltaY)) > fabs(Double(event.deltaX))) {
        self.nextResponder?.scrollWheel(with: event);
    } else {
        super.scrollWheel(with: event);
    }
}

通过这种方式,它可以检查用户是否主要在一个方向上滚动,并进行适当的处理。

您可以在scrollViewDidSoll:中观察内容偏移量,并将x值设置为您喜欢的值。

编辑:好吧。你看到这个了吗:限制滚动?

想知道您是否遇到

- (void)setHasVerticalScroller:(BOOL)flag;

禁用垂直滚动条?

也可以在界面生成器中设置此项。

最新更新