如何禁用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;
禁用垂直滚动条?
也可以在界面生成器中设置此项。