在其边界之外绘制NSTableView背景

时间:2012-02-25 15:07:35

标签: cocoa osx-lion nstableview nsscrollview

我遇到问题,因为Lion引入了弹性滚动(如下图所示)。当您滚动我的表视图(基于单元格,具有交替的行颜色)超出其范围时,背景不会绘制。我试过在-[drawBackgroundInClipRect:]中做自己的绘图,但看起来你不能超过表视图的界限。如何将背景扩展到弹性滚动区域?

Scrolling left of table

1 个答案:

答案 0 :(得分:0)

回答您的问题

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

坏消息

NSScrollView(及其各个部分),NSTableView和NSTableHeaderView的集合本身很复杂。一旦你将基于视图的功能投入到混合中(其中每一行都有一个视图,每个单元都有自己的视图,每个都重复使用,动画周围等),覆盖这种行为“无法通过生活,儿子!” ; - )

好消息

交替背景颜色未在弹性拉伸的滚动表格视图中延伸的问题已经解决(至少在10.10,我可以告诉),所以这不再是问题,除非你具有自定义背景或仅背景颜色的行/单元格视图。

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

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

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