隐藏滚动条,同时在NSScrollView中启用滚动功能

时间:2012-02-20 16:49:20

标签: objective-c swift appkit nsscrollview

我想隐藏NSScroller的{​​{1}}。我知道方法NSScrollViewsetHasHorizontalScroller:。但是,如果我禁用滚动条,那么在该方向上滚动也会被禁用。我只想隐藏滚动条,同时保持滚动的可能性。有什么想法吗?

6 个答案:

答案 0 :(得分:11)

我能够做到这一点:

[labelsScrollView setHasHorizontalScroller:YES];
[[labelsScrollView horizontalScroller] setAlphaValue:0];

答案 1 :(得分:3)

alphaValue设置为zero的诀窍有问题,因为隐形滚动条仍会接收到触摸。以下是我们为解决这个问题所做的工作(Swift 4)。

class InvisibleScroller: NSScroller {

   override class var isCompatibleWithOverlayScrollers: Bool {
      return true
   }

   override class func scrollerWidth(for controlSize: NSControl.ControlSize, scrollerStyle: NSScroller.Style) -> CGFloat {
      return CGFloat.leastNormalMagnitude // Dimension of scroller is equal to `FLT_MIN`
   }

   public override init(frame frameRect: NSRect) {
      super.init(frame: frameRect)
      setupUI()
   }

   private func setupUI() {
      // Below assignments not really needed, but why not.
      scrollerStyle = .overlay
      alphaValue = 0
   }
}

用法:

private class TabBarScrollView: NSScrollView {

   private func setupUI() {

      borderType = .noBorder
      backgroundColor = .clear
      drawsBackground = false

      horizontalScrollElasticity = .none
      verticalScrollElasticity = .none

      automaticallyAdjustsContentInsets = false
      horizontalScroller = InvisibleScroller()
   }
}

答案 2 :(得分:1)

if collectionView.enclosingScrollView?.hasHorizontalScroller == true {
        collectionView.enclosingScrollView?.horizontalScroller?.scrollerStyle = .overlay
        collectionView.enclosingScrollView?.horizontalScroller?.alphaValue = 0.0
    } else {
        print("horizontalScroller")
    }

确保选择了水平滚动条:

enter image description here

答案 3 :(得分:0)

您检查了NSScrollView Class Reference吗?

[scrollView setHasVerticalScroller:NO];

此方法不会禁用滚动。

如果您仍然不想使用该方法,您还可以:

[scrollView setHorizontalScroller:nil];

答案 4 :(得分:0)

我正在寻找答案,因为设置hasVerticalScroller = false会禁用触控板滚动。与此同时,我可怕的黑客是在我的NSScrollView子类中使用以下内容:

self.hasVerticalScroller = true
self.scrollerInsets.right = -999999

卷轴在技术上是可见的,它远离视图的边缘。 :(

答案 5 :(得分:-1)

这是我在上面的答案中的解决方案:

[myNSScrollView setHasVerticalScroller:YES];
[_myNSScrollView setScrollerInsets:NSEdgeInsetsMake(0, 0, 0, -99999)];

即使在滚动过程中,也会隐藏滚动条。