NSTableView的viewForTableColumn:row:在Mavericks中调用了比预期更多的行

时间:2014-04-11 13:28:19

标签: cocoa nstableview

我的理解是viewForTableColumn:row:仅针对可见的行调用。

我使用以下方法证实了这一点: NSRange rowsInRect = [aTableView rowsInRect:[aTableView visibleRect]]; NSInteger lastVisibleRow = rowsInRect.location + rowsInRect.length;

但是对于Mavericks,viewForTableColumn:行被调用了很多次而没有向下滚动。

例如,如果我的上一个可见行是35,则调用139行的数据源方法。

有人可以解释一下吗?

1 个答案:

答案 0 :(得分:5)

我在OS X v10.9的AppKit发行说明中找到了解释。

这里是:

  

Mac OS 10.9有一项名为Responsive Scrolling的新功能。响应滚动允许应用程序继续快速滚动内容,即使应用程序的主线程忙于执行其他工作。 AppKit通过使文档视图绘制的内容超过空闲时当前可见的内容来实现此目的。

     

为了便于响应滚动,系统会要求您的文档视图绘制当前用户不可见的部分。

     

NSView使用'rect'调用以下方法,建议区域应完全呈现以进行透支。覆盖此方法并为'rect'引入其他子视图和预缓存内容,以便执行响应式滚动。   要禁止特定视图(例如NSTableView)的过度绘制,请覆盖此方法并调用[super prepareContentInRect:[self visibleRect]]。

     

(无效)prepareContentInRect:(的NSRect)RECT;