是否可以“隐藏” NSScrollView 的滚动条并仍然获得手势滚动行为?
5 回答
创建一个 NSScroller 子类并将其设置为 NSScrollView 实例的垂直/水平滚动条。
NSScroller 子类应覆盖此(10.7 及更高版本):
+ (CGFloat)scrollerWidthForControlSize:(NSControlSize)controlSize scrollerStyle:(NSScrollerStyle)scrollerStyle {
return 0;
}
这绝对是 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];
}
来源:https ://stackoverflow.com/a/12960795/836263中的jmk
2)使用传统风格时,反弹和动力似乎被打破了。它还部分破坏了 Apple 的滚动同步代码。NSScrollerStyleOverlay
如果一个是另一个是 ,它会导致滚动视图重置滚动位置NSScrollerStyleLegacy
。如果滚动覆盖样式滚动视图,则滚动旧样式,它将两个滚动视图重置为顶部 y=0 滚动偏移量。
[self.scrollView setHasVerticalScroller:YES];
[self.scrollView setScrollerStyle:NSScrollerStyleLegacy];
[self.scrollView setHasVerticalScroller:NO];
导致滚动视图不显示滚动条并且不响应手势滚动:
-setHasHorizontalScroller:NO
导致显示禁用的滚动条,但它响应手势滚动:
-setHasHorizontalScroller:YES
-setHidden:YES
对的,这是可能的。在初始化滚动视图后尽快尝试。
self.scrollView.wantsLayer = YES;
我已经在不隐藏NSScroller
子类和不接触的情况下完成了这项工作setHasVerticalScroller:
。此外,如果self.scrollView
是一个覆盖的子类drawRect:
,请尝试将其关闭以确保您在那里所做的事情不会导致问题。
你为什么不试试呢?
回答这个问题:是的,如果用户有带滚轮的鼠标或具有滚动功能的触摸板,尽管滚动条不可见,但仍然可以滚动视图。