Objective c NSCollectionView visibleRect属性

Objective c NSCollectionView visibleRect属性,objective-c,macos,cocoa,core-graphics,nscollectionview,Objective C,Macos,Cocoa,Core Graphics,Nscollectionview,NSCollectionView显示多个项目。我有一个网格状的布局 我需要确定当前可见的项目 根据这项研究,有一种方法 - (NSArray<NSCollectionViewItem *> *)visibleItems; 然后,可见矩形将具有预期的效果 x=0 y=100 width = 300 height = 300 这与文件完全一致 但是,在NSCollectionView的情况下,它的行为不同。 如果我创建了项目并显示了第一个项目,则将显示visibleRect x =

NSCollectionView显示多个项目。我有一个网格状的布局

我需要确定当前可见的项目

根据这项研究,有一种方法

- (NSArray<NSCollectionViewItem *> *)visibleItems;
然后,可见矩形将具有预期的效果

x=0
y=100
width = 300
height = 300
这与文件完全一致

但是,在
NSCollectionView
的情况下,它的行为不同。 如果我创建了项目并显示了第一个项目,则将显示
visibleRect

x = 0
y = 0
现在,如果我向下滚动一点,输出将是

x = 0
y = some number > 0
但是,我希望它应该返回一个不同的
y
值。因为

视图的可见矩形根据视图的边界坐标系反映实际显示的内容部分

假设项目之间没有间距,且项目相同

x = 0
y = (numItems - 1) * itemHeight

这种行为当然不是问题。我可以使用这些值根据返回的值来计算。我想了解原因

我错过了什么


p.S.
NSCollectionView
visibleRect
及其项的
frame
基本上表现为坐标系原点位于左上角,y向下递增,x向右递增。

NSCollectionView
使用翻转坐标系。
请参见
NSView
和的属性。

NSCollectionView
使用翻转坐标系。
查看
NSView的属性
和。

我不确定您想做什么。您说“我需要确定当前可见的项目”,但(正如您所指出的)NSCollectionView已经为您这样做了。在这种情况下,“我”是谁?您自己的NSCollectionView子类或NSCollectionViewLayout?@mr.fixit Collection view不会自动执行此操作。它只能返回最近使用的项目数组。但是,如果用户滚动掉某个项目,它仍然可以使用,但实际上并不可见。为了确定实际可见的项目,需要检查项目的框架矩形是否与集合视图的可见矩形相交。当你开始做的时候,你需要处理坐标。因为,在文档中没有写NSCollectionView使用翻转坐标,所以我很困惑。我不确定您想做什么。您说“我需要确定当前可见的项目”,但(正如您所指出的)NSCollectionView已经为您这样做了。在这种情况下,“我”是谁?您自己的NSCollectionView子类或NSCollectionViewLayout?@mr.fixit Collection view不会自动执行此操作。它只能返回最近使用的项目数组。但是,如果用户滚动掉某个项目,它仍然可以使用,但实际上并不可见。为了确定实际可见的项目,需要检查项目的框架矩形是否与集合视图的可见矩形相交。当你开始做的时候,你需要处理坐标。因为,在文档中没有写NSCollectionView使用翻转坐标,所以我感到困惑。
x = 0
y = (numItems - 1) * itemHeight