UICollectionView中cellForItemAt处的滚动单元问题

时间:2019-01-09 15:08:49

标签: swift uicollectionview

编辑: 问题已解决。我遵循了有关如何从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,或者有时什么都不显示。当我尝试向左滚动第一个单元格时,我仍然看到单元格号发生了变化。

我想问一下在我的情况下识别细胞的适当方法是什么?请提供一些示例代码。谢谢。下图显示了我的当前状态。

1 个答案:

答案 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
    }