我已经为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应该是正确的,但似乎不是。
答案 0 :(得分:0)
如果检查错误含义,则表示您尝试从阵列中获取的项目不可用。
*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 1 beyond bounds [0 .. 0]'
您正尝试在索引1
处获取某些内容,但您的数组大小为[0 .. 0]
现在为什么会这样?
CollectionView
获取单元格时,它在该运动中不可用。原因是Cell已被添加。现在如何修复,在这里使用optional
。
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()
}
}