1

我已经为 UICollectionViewDelegateFlowLayout 实现了这个委托方法,但是当试图将单元格出队时,我收到了这个错误:

*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 1 beyond bounds [0 .. 0]'

如果我尝试这样做,我也会得到这个:let cell = collectionView.cellForItem(at: indexPath) as! RQTTipCell

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "TipCell", for: indexPath) as! RQTTipCell
        let height = self.proxyView!.tipCollect.contentSize.height
        let width = cell.bagRatio.multiplier / height
        return CGSize(width: width, height: height)

    }

这个 indexPath 应该是正确的,但似乎不是。

4

1 回答 1

0

如果您检查错误含义,则意味着您尝试从数组中获取的项目不可用。

 *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 1 beyond bounds [0 .. 0]'

您正在尝试在索引处获取某些内容,1但您的数组大小为[0 .. 0]

现在为什么会这样?

  • 简单的解释是,当您尝试从中获取 Cell 时CollectionView,它在该动作中不可用。原因是 Cell 已被添加。

现在如何修复,optional在这里使用 cast。

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

    if let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "TipCell", for: indexPath) as? RQTTipCell {
       let height = self.proxyView!.tipCollect.contentSize.height
       let width = cell.bagRatio.multiplier / height
       return CGSize(width: width, height: height)
    } else {
       // default CGSzie
       CGSize()
    }

}
于 2017-04-19T17:58:50.037 回答