我想隐藏NSScroller
的{{1}}。我知道方法NSScrollView
和setHasHorizontalScroller:
。但是,如果我禁用滚动条,那么在该方向上滚动也会被禁用。我只想隐藏滚动条,同时保持滚动的可能性。有什么想法吗?
答案 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")
}
确保选择了水平滚动条:
答案 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)];
即使在滚动过程中,也会隐藏滚动条。