如果setHasHorizo​​ntalScroller可以滚动NSScrollView:NO?

时间:2011-05-17 13:36:10

标签: cocoa nsscrollview nsscroller

是否可以“隐藏”NSScrollView的滚动条并仍然可以获得手势滚动行为?

5 个答案:

答案 0 :(得分:4)

创建NSScroller子类并将其设置为NSScrollView实例的垂直/水平滚动条。

NSScroller子类应该覆盖它(10.7及以上):

+ (CGFloat)scrollerWidthForControlSize:(NSControlSize)controlSize scrollerStyle:(NSScrollerStyle)scrollerStyle {
return 0;
}

答案 1 :(得分:3)

这绝对是AppKit中的一个错误。我能够使用以下任一解决方案在10.8.5上工作:

1)子类NSScroller(首选方法)

+ (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];
}

来源jmk

中的https://stackoverflow.com/a/12960795/836263

2)使用传统风格时,反弹和动力似乎已经破裂。它还部分打破了Apple的scroll synchronization代码。如果一个是NSScrollerStyleOverlay而另一个是NSScrollerStyleLegacy,它会导致滚动视图重置滚动位置。如果滚动叠加样式滚动视图,则滚动旧样式,它会将两个滚动视图重置为顶部y = 0滚动偏移。

[self.scrollView setHasVerticalScroller:YES];
[self.scrollView setScrollerStyle:NSScrollerStyleLegacy];
[self.scrollView setHasVerticalScroller:NO];

答案 2 :(得分:1)

使scrollview不显示滚动条而不响应手势滚动:

-setHasHorizontalScroller:NO

导致显示禁用的滚动条,但它会响应手势滚动:

-setHasHorizontalScroller:YES
-setHidden:YES

答案 3 :(得分:1)

是的,有可能。初始化scrollView后立即尝试。

    self.scrollView.wantsLayer = YES;

我已经让这个工作没有隐藏NSScroller子类而没有触及setHasVerticalScroller:。此外,如果self.scrollView是覆盖drawRect:的子类,请尝试将其关闭,以确保您在那里做的事情不会导致问题。

答案 4 :(得分:0)

为什么不试试呢?

回答这个问题:是的,如果用户的鼠标带有滚轮或具有滚动功能的触控板,尽管滚动条不可见,仍然可以滚动视图。