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

时间:2017-10-25 09:09:54

标签: macos cocoa nscollectionview

我在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(_:)中),一切正常,项目会响应委托方法。

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

为什么初始布局导致这种行为的任何想法?

更新

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

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

解决问题,第一项表现正确。

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

1 个答案:

答案 0 :(得分:0)

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

对于发生问题的情况,我想要取消标题。

懒惰,因为我只是返回一个普通的NSView()作为

中的标题视图
func collectionView(_ collectionView: NSCollectionView, viewForSupplementaryElementOfKind kind: NSCollectionView.SupplementaryElementKind, at indexPath: IndexPath) -> NSView

我想不会返回一个正确的布局约束视图搞砸了collectionView布局。