我有一个UICollectionView
代表一个日历,加载时生成了13个月的数据,每个月都有一部分。用户界面中有一个按钮可以在本年度和下一年之间切换,但是当从集合末尾滚动到本年年初时,应用程序崩溃并显示以下错误。
'NSRangeException', reason: '*** -[__NSArrayM objectAtIndexedSubscript:]: index 9223372036854775806 beyond bounds [0 .. 4]'
这是导致错误的方法。
public func scrollTo(year: Int) {
if let month = months.firstIndex(where: { $0.components.year == year }),
let attributes = collectionView.layoutAttributesForSupplementaryElement(ofKind: UICollectionElementKindSectionHeader, at: IndexPath(item: 0, section: month)){
let y = attributes.frame.origin.y - collectionView.contentInset.top
// This is the line causing the error
collectionView.setContentOffset(CGPoint(x: 0, y: y), animated: true)
}
}
我已经尝试打印出我计算出的y
值,但是每次崩溃时它都是0
。
也许值得一提的是,异常中提到的索引等于Int.max - 1
,尽管看到y
是CGFloat
,但我不确定这与它们之间的相关性。 / p>
答案 0 :(得分:0)
为什么不使用此内置的UICollectionView实例方法
scrollToItem(at:at:animated:)
与您计算出的索引路径一样?
滚动收集视图的内容,直到可见指定的项目。 from apple docs
答案 1 :(得分:0)
我不确定动画是否会导致崩溃,但是在对animated
的调用中将false
更改为setContentOffset(...)
可以解决此问题。