Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 绘制NSTableView';它的背景超出了它的界限_Cocoa_Osx Lion_Nstableview_Nsscrollview - Fatal编程技术网

Cocoa 绘制NSTableView';它的背景超出了它的界限

Cocoa 绘制NSTableView';它的背景超出了它的界限,cocoa,osx-lion,nstableview,nsscrollview,Cocoa,Osx Lion,Nstableview,Nsscrollview,自从Lion引入弹性滚动(如下图所示)以来,我遇到了一个问题。当您将“我的表格视图”(基于单元格,具有交替行颜色)滚动到其边界之外时,背景不会绘制。我曾尝试在-[trackgroundincliprect:中绘制自己的图形,但似乎无法超出表视图的范围。如何将背景扩展到弹性滚动区域 回答您的问题 超出其边界的视图图形通常是禁止的。使用交替背景色时,NSTableView直接绘制其背景。但在基于视图的表视图中,使用了NSTableRowView,如果它有自己的背景色,这将带来更大的挑战 坏消息 NS

自从Lion引入弹性滚动(如下图所示)以来,我遇到了一个问题。当您将“我的表格视图”(基于单元格,具有交替行颜色)滚动到其边界之外时,背景不会绘制。我曾尝试在
-[trackgroundincliprect:
中绘制自己的图形,但似乎无法超出表视图的范围。如何将背景扩展到弹性滚动区域


回答您的问题

超出其边界的视图图形通常是禁止的。使用交替背景色时,NSTableView直接绘制其背景。但在基于视图的表视图中,使用了NSTableRowView,如果它有自己的背景色,这将带来更大的挑战

坏消息

NSScrollView(及其各个部分)、NSTableView和NSTableHeaderView的组合本身就很复杂。一旦您将基于视图的功能加入到混合中(每一行都有一个视图,每个单元格都有自己的视图,并且每一行都被重用、设置动画等等),覆盖此行为“是不可能的,孩子!”;-)

好消息

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

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

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


我还没有测试过这个理论,但我相信它会奏效。我希望这有帮助。

这是在该区域绘制的滚动视图。也许您可以为交替行创建一个图案,并将其设置为滚动视图中的背景色?这仍然是一个问题吗?我无法在OS X 10.9中重现这种效果。@jemmons不确定我在使用Mavericks后是否会更新。如果您碰巧不打算使用交替行,但仍希望支持lion,则使用单元格间距高度来调整行之间的间距并显示行之间的清晰区别,调整这些设置将使其看起来干净整洁。