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
这种行为当然不是问题。我可以使用这些值根据返回的值来计算事物。我想了解原因。
我想念什么?
附言基本上
NSCollectionView
visibleRect
及其项的frame
的行为就像坐标系的原点在左上角,而y
向下增加而x
右增加。 最佳答案
NSCollectionView
使用翻转的坐标系。
请参见NSView
和flipped的Flipped Coordinate Systems属性。
关于objective-c - NSCollectionView visibleRect属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55170505/