NSCollectionView visibleRect属性

问题描述 投票:1回答:1

NSCollectionView显示多个项目。我有一个类似Grid的布局。

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

根据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

enter image description here

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

我错过了什么?

附:基本上NSCollectionView visibleRect和它的项目的frame表现得好像坐标系的起源在左上角,y增加下来,x增加右。

objective-c macos cocoa core-graphics nscollectionview
1个回答
0
投票

NSCollectionView使用翻转坐标系。查看flippedNSViewFlipped Coordinate Systems属性。

© www.soinside.com 2019 - 2024. All rights reserved.