我有一个NSCollectionView,我想隐藏水平滚动指示器。
我已经尝试了
collectionView.enclosingScrollView?.verticalScroller?.isHidden = true
但它没有用。
提前谢谢。
答案 0 :(得分:4)
隐藏也不适合我。
我发现破解此漏洞的唯一方法是更改插图:
( scrollViewCollectionView 的类型为 NSScrollView ,此示例是在通过编程方式创建 NSCollectionView 时)
scrollViewCollectionView.documentView?.enclosingScrollView?.scrollerInsets = NSEdgeInsets.init(top: 0, left: 0, bottom: 100, right: 0)
请注意:我的NSCollectionView是水平的,并且高度小于100,这就是为什么此hack在隐藏的指示器中得以解决的原因。
答案 1 :(得分:1)
在故事板中设置“显示垂直滚动条”或“显示水平滚动条”不会在不设置“集合视图的边框滚动视图”的约束(高度和宽度)的情况下删除滚动条。在我这样做并取消选中故事板中属性面板中的“显示垂直滚动条”和“显示水平滚动条”之后,它们就消失了。
答案 2 :(得分:1)
将 hasHorizontalScroller
或 horizontalScroller
覆盖到 false
和 nil
将导致 NSScroller
不显示,并且 NSScrollView
不会响应滚动事件。
这意味着您无法滚动浏览 NSScrollView
的许多滚动方法。
当 hasHorizontalScroller = true
时,horizontalScroller != nil
会导致绘制错误。
class MyScrollView : NSScrollView {
// !!! Don't use this !!!
override var hasHorizontalScroller: Bool {
get {
// return false will cause NSScroller not to be displayed
// and NSScrollView will not respond to scroll events,
// this means that you can't scroll through NSScrollView's many scrolling methods.
false
}
set {
super.hasHorizontalScroller = newValue
}
}
// !!! Don't use this !!!
override var horizontalScroller: NSScroller? {
get {
// return nil will cause NSScroller not to be displayed,
// but it still occupies the drawing area of the parent view.
nil
}
set {
super.horizontalScroller = newValue
}
}
}
这是隐藏 NSScroller
并正确响应滚动事件的方法。仅在 10.7 以上的版本中有用:
class HiddenScroller: NSScroller {
// @available(macOS 10.7, *)
// let NSScroller tell NSScrollView that its own width is 0, so that it will not really occupy the drawing area.
override class func scrollerWidth(for controlSize: ControlSize, scrollerStyle: Style) -> CGFloat {
0
}
}
答案 3 :(得分:0)
答案 4 :(得分:0)
我也遇到同样的问题。 MCMatan是正确的。请将滚动条的位置调整到不可见的位置。
scrollView.scrollerInsets = NSEdgeInsets.init(top: 0, left: 0, bottom: -10, right: 0)
答案 5 :(得分:0)
对于Swift 4和5:
对于水平:
{{"ack":"success"},"result":[{"ebayItemId":"153532419741"}]}
对于垂直:
collectionView.showsHorizontalScrollIndicator = false
答案 6 :(得分:0)
我遇到了同样的问题,只是解决了。您可以编写自己的自定义NSScrollView
,并覆盖2个存储的属性:hasHorizontalScroller
,horizontalScroller
和1个函数scrollWheel(with:)
。这是我的代码:
class MyScrollView: NSScrollView {
override var hasHorizontalScroller: Bool {
get {
return false
}
set {
super.hasHorizontalScroller = newValue
}
}
override var horizontalScroller: NSScroller? {
get {
return nil
}
set {
super.horizontalScroller = newValue
}
}
override func scrollWheel(with event: NSEvent) {}
}
也不要忘记在.xib或情节提要中将Border Scroll View
类设置为MyScrollView
。
享受吧!
答案 7 :(得分:0)
@IBOutlet weak var collectionViewScrollView: NSScrollView!
viewDidAppear()
函数中添加:
collectionViewScrollView.scrollerStyle = .legacy
collectionViewScrollView.verticalScroller?.isHidden = true
-用于垂直滚动
collectionViewScrollView.horizontalScroller?.isHidden = true
-用于水平滚动
由于某些原因,仅在我将collectionViewScrollView.scrollerStyle
设置为.legacy
的情况下才有效。不知道为什么,但是可以。
答案 8 :(得分:0)
In my case, the horizontal and vertical scroller of the collection scroll view are only hidden if do exactly as follow:
1. In Interface Builder.
1.a. Select Scroll View —> Attributes Inspector:
+ Uncheck Show Horizontal Scroller.
+ Uncheck Show Vertical Scroller.
+ Uncheck Automactically Hide Scroller.
1.b. Select Size Inspector:
+ Uncheck Automatically Adjust.
1.c. Select Clip View —> Size Inspector:
+ Uncheck Automatically Adjust.
2. In code do exactly as follow:
[self.scrollView setBackgroundColor:[NSColor clearColor]];
[self.scrollView setBorderType:NSNoBorder];
[self.scrollView setHasVerticalScroller:NO];
[self.scrollView setHasHorizontalScroller:NO];
[self.scrollView setAutomaticallyAdjustsContentInsets:NO];
[self.scrollView setContentInsets:NSEdgeInsetsMake(0.0, 0.0, -NSHeight([self.scrollView horizontalScroller].frame), -NSWidth([self.scrollView verticalScroller].frame))];
[self.scrollView setScrollerInsets:NSEdgeInsetsMake(0.0, 0.0, -NSHeight([self.scrollView horizontalScroller].frame), -NSWidth([self.scrollView verticalScroller].frame))];
[self.scrollView setScrollEnable:NO];
NSClipView *clipView = (NSClipView *)[self.scrollView documentView];
if ([clipView isKindOfClass:[NSClipView class]])
{
[clipView setAutomaticallyAdjustsContentInsets:NO];
[clipView setContentInsets:NSEdgeInsetsZero];
}
Then the NSCollectionView will fit to the Clip View as same width and height without the horizontal and vertical scrollers.
答案 9 :(得分:0)
如果有人还需要它,这一招应该管用
collectionView.enclosingScrollView?.horizontalScroller?.alphaValue = 0.0