我制作了一个光滑的NSScroller
子类,但无法弄清楚如何将其覆盖在NSScrollView
之上,而不是将documentView
推到一边。
在这里,您可以看到我希望100%宽的NSCollectionView
的背景,并让卷轴位于顶部。目前,我必须为滚动条设置白色背景,因为使用clearColor
进行绘制时不会显示为透明,而是显示为黑色。
我是以错误的方式来做这件事的吗?我错过了一些明显的东西吗?如何实现位于NSScroller
内容之上的透明跟踪NSScrollView
的行为?
答案 0 :(得分:9)
我能够通过在子类 OF NSSCROLLVIEW
中实现tile
来获得定位
- (void)tile {
[super tile];
[[self contentView] setFrame:[self bounds]];
}
事实证明,尝试绘制清晰的颜色是问题的开始。在滚动子类中,我只是完全忽略了与滑块轨道有关的任何绘图通过对NSSCROLLER子类的过度DRAWRECT:
,如此:
- (void)drawRect:(NSRect)dirtyRect
{
[self drawKnob];
}
答案 1 :(得分:1)
请注意,要使其正常工作,您必须为scrollView启用图层支持!
即,致电:
[scrollViewInstance setWantsLayer:YES];
或在Interface Builder中设置。
如果你不这样做,scrollView的contentView将绘制滚动条的ON TOP。另外:你应该知道你正在做的事情本质上是两个NSView重叠(NSScrolller在NSScrollView之上---都是从NSView继承的。)与iOS上的UIViews不同,OS X上的重叠NSViews不受任何当前版本的正式支持操作系统(10.6下降)。启用CALayers似乎可以使它工作,但它仍然需要牢记。当然,打开图层会严重影响绘图性能。
有关详细信息,请参阅此SO问题:Is there a proper way to handle overlapping NSView siblings?
答案 2 :(得分:-1)
这种颜色是什么:[NSColor colorWithCalibratedRed:0.0 green:0.0 blue:0.0 alpha:0.0]
我认为你必须使用界面构建器修改大小。