NSCollectionView indexPathForItem(at:point)为第一个项返回nil



我在MacOS应用程序(SDK 10.13)中使用带有标准NSCollectionViewFlowLayout的NSCollectionView。

无论出于何种原因,IndexPath(item: 0, section: 0)处的项目都未正确"识别"。

例如,查询此项目的indexPathForItem(at: point)会返回nil。此外,像collectionView(_ collectionView: NSCollectionView, didSelectItemsAt indexPaths: Set<IndexPath>)这样的委托方法也不会为此特定项调用。

collectionView中的所有其他项目行为正常。

当显式触发collectionView.layout()时(例如在rightMouseDown(_:)中),一切都很好,并且该项响应委托方法。

我尝试在viewDidLoad()中触发collectionView.layout(),但没有成功。在发生后续布局事件(例如滚动视图)之前,该项目是不可选择的。

你知道为什么最初的布局会导致这种行为吗?


更新:

我刚刚发现,注释掉部分标题大小的委托方法

func collectionView(_ collectionView: NSCollectionView, layout collectionViewLayout: NSCollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> NSSize {
return NSSize(width: 1000, height: 50)
}

解决了问题,并且第一个项目的行为正确。

我当然想要一个头球。我需要注意的部分标题大小是否有任何限制?

好的,没关系。原来是我的错。

对于出现问题的场景,我想抑制标题。

尽管我很懒,但我刚刚返回了一个普通的NSView()作为中的头视图

func collectionView(_ collectionView: NSCollectionView, viewForSupplementaryElementOfKind kind: NSCollectionView.SupplementaryElementKind, at indexPath: IndexPath) -> NSView

我想没有返回一个正确的布局约束视图会打乱collectionView的布局。

相关内容

最新更新