我是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/