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

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

根据documentation,有一种方法

- (NSArray<NSCollectionViewItem *> *)visibleItems;


与描述


  此方法返回的项目表示活动的,当前由集合视图管理。此数组可能包含集合视图实际可见矩形之外的项目。例如,它可能包含最近可见但从视图中滚动出来的项目。要测试某个项目是否实际可见,请检查其框架矩形是否与集合视图的visibleRect相交。


因此,我需要根据其frame坐标和collectionView的visibleRect手动计算哪些项目可见。当然可以了

但是,困扰我的是visibleRect返回哪个坐标。

通常,如果我可以说,它与documentation here一致

NSImage *img = [[NSImage alloc] initWithContentsOfFile:...];

[imageView setFrame:NSMakeRect(0., -100., 300., 400.)];
[imageView setImage:img];
NSLog(..., [imageView visibleRect]);
NSLog(..., [imageView frame]);


那么可见的矩形将具有预期的

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


objective-c - NSCollectionView visibleRect属性-LMLPHP

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

我想念什么?

附言基本上NSCollectionView visibleRect及其项的frame的行为就像坐标系的原点在左上角,而y向下增加而x右增加。

最佳答案

NSCollectionView使用翻转的坐标系。
请参见NSViewflippedFlipped Coordinate Systems属性。

关于objective-c - NSCollectionView visibleRect属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55170505/

10-10 23:50