scrollToItemAtIndexPath

scrollToItemAtIndexPath

我是iOS和Swift的新手。

设法创建了具有自定义LayoutAttributes和可重用的自定义单元格的UICollectionView,该单元格可为图像计算其高度。
太好了工作正常,我可以手动滚动。都好。

问题是我想以编程方式滚动到第N个indexPath,但scrollToItemAtIndexPath似乎仅适用于可见的滚动条。

因此,我必须在iPhone 5S上显示2列图像才能显示9张图像。
图像总数为31。

因此,使用collectionView的ScrollToItemAtIndexPath可以处理第9个项目。

但是,当我尝试以编程方式进一步滚动时,例如说12号,它不起作用。
奇怪的是,如果手动滚动,然后调用代码,它将起作用。
因此,我进行了一些调试,发现只有前9个像元是用高度计算的。
那会是问题吗?如果是这样,我该如何运作?

尝试过使用didLayoutSubviews和其他建议,但这没有用。

目前,我正在使用didSelectItemAtIndexPath collectionView函数来以编程方式滚动。

编辑:

override func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
    let item = self.collectionView(self.collectionView!, numberOfItemsInSection: 0) - 1
            let lastItemIndex = NSIndexPath(forItem: item, inSection: 0)
            self.collectionView?.scrollToItemAtIndexPath(lastItemIndex, atScrollPosition: UICollectionViewScrollPosition.CenteredVertically, animated: true)
}

即使我对索引路径的编号进行了硬编码(例如12),也仍然无法使用。
如果需要更多信息,请告诉我。

我在这里想念什么吗?

非常感谢。

最佳答案

您应该在viewDidAppear中调用方法scrollToItemAtIndexPath,这样,已经调用了cellForItemAtIndexPath。

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)

    collectionView.scrollToItemAtIndexPath(NSIndexPath(forRow: index, inSection: 0), atScrollPosition: .CenteredVertically, animated: false)

}

关于ios - UIcollectionView scrollToitemAtIndexPath不适用于不可见的单元格,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37883813/

10-12 14:30