NSCollectionView滚动无法正常工作

时间:2017-03-05 14:26:00

标签: swift scroll nscollectionview

我尝试在我的parameterCollectionView中滚动到新插入的项目(此处称为" Wert 12")。但不知何故,滚动位置只是忽略了最后一项。使用NSCollectionViewScrollPosition.trailingEdge应显示最后一项但不显示。

  

滚动以使所选项目的边界框的后缘与集合视图边界的后缘相邻。

我的代码:

    parameterCollectionView.reloadData()
    let section = 0
    let item = parameterCollectionView.numberOfItems(inSection: section) - 1 //<-- last item in collection view
    let myIndexPath: Set = [IndexPath(item: item, section: section)]
    parameterCollectionView.scrollToItems(at: myIndexPath, scrollPosition: NSCollectionViewScrollPosition.trailingEdge)
有趣的是:在最后一个通道代码之前选择项目时没有任何变化。所以,最后一项被忽略了:

parameterCollectionView.reloadData()
let section = 0
let item = parameterCollectionView.numberOfItems(inSection: section) - 2 // second last item in collection view
let myIndexPath: Set = [IndexPath(item: item, section: section)]
parameterCollectionView.scrollToItems(at: myIndexPath, scrollPosition: NSCollectionViewScrollPosition.trailingEdge)

因此,两个代码片段都会对集合视图产生相同的行为:最后一项(&#34; Wert 12&#34;)未显示!!!

enter image description here

为什么NSCollectionView一直对我这么讨厌?

1 个答案:

答案 0 :(得分:2)

我认为NSCollectionView scrollToItems(at :)方法中存在一个错误。有时NSCollectionView忽略了它需要滚动的事实,即使调用了上述方法。在这种情况下,被“滚入”的项目停留在NSCollectionView的可见框架之外。

因此,不能通过例如检索相应的NSCollectionViewItems。调用项目(at :)方法。在这些情况下,item(at :)将返回nil而不是有效的项目引用。