编辑: 问题已解决。我遵循了有关如何从LBTA构建Youtube的Youtube教程。
我的homeController包含4个可以水平滚动的单元格。每个单元(也包括UICollectionViewCell)具有不同的提取方法来从Firebase加载数据。
我具有以下滚动代码:
//在我的setupCollectionView中
if let flowLayout = collectionView?.collectionViewLayout as? UICollectionViewFlowLayout {
flowLayout.scrollDirection = .horizontal
flowLayout.minimumLineSpacing = 0
}
我也有:
override func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
let index = Int(targetContentOffset.pointee.x / view.frame.width)
let indexPath = IndexPath(item: index, section: 0)
menuBar.collectionView.selectItem(at: indexPath, animated: true, scrollPosition: .centeredHorizontally)
setTitleForIndex(index: index)
}
我有一个菜单栏附加到collectionView,菜单栏工作正常。但是UICollectionViewCell没有。
当我通过左右滚动来测试它时,索引号到处都是。例如,当我滚动到第一个单元格时,它显示2或3,或者有时什么都不显示。当我尝试向左滚动第一个单元格时,我仍然看到单元格号发生了变化。
我想问一下在我的情况下识别细胞的适当方法是什么?请提供一些示例代码。谢谢。下图显示了我的当前状态。
答案 0 :(得分:0)
您不需要重写scrollViewWillEndDragging方法。对于collectionView,您正在重用单元格。因此,当您滚动到屏幕外的单元格时,将调用collectionViewCellForItemAt方法。我假设您一次只能显示1个单元格。因此,当显示一个新的单元格时,您可以根据要重复使用的单元格来更改标题。
// Note I only used partial code from your method
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: numberViewCellId, for: indexPath) as! ThirdViewCell
cell.delegate = self
setTitleForIndex(index: indexPath.Row)
return cell
}