mpl*_*ert 9 objective-c appkit nsscrollview swift
我想隐藏的NSScroller第NSScrollView.我知道这些方法setHasHorizontalScroller:和setHasVerticalScroller:.但是,如果我禁用滚动条,那么在该方向上滚动也会被禁用.我只想隐藏滚动条,同时保持滚动的可能性.有什么想法吗?
Mar*_*Bao 11
通过这样做,我能够做到这一点:
[labelsScrollView setHasHorizontalScroller:YES];
[[labelsScrollView horizontalScroller] setAlphaValue:0];
Run Code Online (Sandbox Code Playgroud)
设置的伎俩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
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
private class TabBarScrollView: NSScrollView {
private func setupUI() {
borderType = .noBorder
backgroundColor = .clear
drawsBackground = false
horizontalScrollElasticity = .none
verticalScrollElasticity = .none
automaticallyAdjustsContentInsets = false
horizontalScroller = InvisibleScroller()
}
}
Run Code Online (Sandbox Code Playgroud)
您检查过NSScrollView 类参考吗?
[scrollView setHasVerticalScroller:NO];
Run Code Online (Sandbox Code Playgroud)
此方法不会禁用滚动。
如果您仍然不想使用该方法,您还可以:
[scrollView setHorizontalScroller:nil];
Run Code Online (Sandbox Code Playgroud)