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

Yes*_*spi 3 cocoa nstableview

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

我使用以下命令确认了这一点:NSRange rowsInRect = [aTableView rowsInRect:[aTableView visibleRect]]; NSInteger lastVisibleRow = rowsInRect.location + rowsInRect.length;

但是对于Mavericks,viewForTableColumn:row在不向下滚动的情况下被调用了很多次。

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

有人可以解释吗?

Yes*_*spi 5

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

开始:

Mac OS 10.9具有称为响应滚动的新功能。响应式滚动允许应用程序继续快速滚动内容,即使应用程序的主线程正忙于其他工作。AppKit通过使文档视图绘制的图形比闲置时当前可见的图形多来实现此目的。

为了促进响应式滚动,将要求您的文档视图绘制用户当前不可见的部分。

NSView使用建议区域的“ rect”调用以下方法,该区域应完全渲染以覆盖。重写此方法,并为“矩形”引入其他子视图和预缓存的内容,以便执行响应式滚动。要抑制特定视图(例如NSTableView)的透支,请重写此方法并调用[super prepareContentInRect:[self visibleRect]]。

(void)prepareContentInRect:(NSRect)rect;