在NSTableView的边界之外绘制背景

10
自从 Lion 引入弹性滚动(如下图所示)以来,我遇到了一个问题。当你在我的表视图(基于单元格,并带有交替行颜色)中滚动超出其边界时,背景不会绘制。我尝试在 -[drawBackgroundInClipRect:] 中进行自己的绘制,但好像不能超出表视图的边界。我该如何将背景延伸到弹性滚动区域?

Scrolling left of table


这个区域的绘制是由包含NSScrollView的对象完成的。也许您可以为交替行创建一个模式,并将其设置为滚动视图的背景颜色? - Aderstedt
1
这个问题还存在吗?我无法在OS X 10.9中重现这种效果。 - jemmons
@jemmons 我不确定,等我用上 Mavericks 之后再更新。 - Dov
如果您不打算使用交替行,但仍希望支持 Lion,则可以使用单元格间距高度进行调整,并呈现出清晰的行之间区别。调整这些设置将使其看起来干净整洁。 - Aneesh Dangayach
1个回答

0

回答您的问题

视图超出其边界通常是不可取的。在使用交替背景色时,NSTableView 直接绘制其背景。但在基于视图的表格视图中,使用 NSTableRowView,如果它有自己的背景颜色,则会带来更多的挑战。

坏消息

NSScrollView(及其各个部分)、NSTableView 和 NSTableHeaderView 的集合本身就很复杂。一旦将基于视图的功能混合在一起(其中每行都有一个视图,每个单元格都有自己的视图,并且每个视图都可以被重用、动画化等),覆盖此行为“不是人生的正确方式!” ;-)

好消息

交替背景颜色未在弹性拉伸滚动表视图中扩展的问题已经得到解决(至少在我所知道的 10.10 上),因此除非您具有具有自定义背景或仅背景颜色的行/单元格视图,否则这不再是问题。

自定义文档(滚动)视图的通用解决方案

如果您希望为具有规则背景的所有其他滚动视图扩展弹性滚动,那么您需要一个自定义的NSScrollView子类,该子类期望文档视图(您的自定义滚动视图)符合您定义的协议(如 -(NSImage *)backgroundImageForClipViewBounds:)。 滚动视图将观察其内容视图(NSClipView)以获取边界更改通知并标记自己进行显示。 当调用滚动视图的 -drawRect:时,它将询问滚动视图其 -backgroundImageForClipViewBounds:(通过您的协议),并将其绘制到自身中,从而使滚动视图的“无限背景”成为自己的背景。

我还没有测试过这个理论,但我相信它会起作用。希望这可以帮助到您。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接