滚动到最后一项时 UICollectionView 崩溃

UICollectionView crashes when scrolling to last item

我的应用程序中有一个 ViewController 可以实时获取评论。获取新评论时,我滚动到垂直 CollectionView 的底部。问题是我的 CrashlyticsscrollToItem 调用中显示了很多崩溃,我无法自己重新创建它。

我无法理解为什么会崩溃,因为我已经考虑了所有可能的值。我问 CollectionView 它有多少项,如果至少有一项,请滚动到最后一项。

这是我的代码:

fileprivate func handleFetchedCommentsResponse() {
    DispatchQueue.main.async {
        self.chatCollectionView.reloadData()
    }
    
    // -------------------------------------------
    
    let numberOfItems = chatCollectionView.numberOfItems(inSection: 0)
    
    if numberOfItems > 0 {
        DispatchQueue.main.async {
            self.chatCollectionView.scrollToItem(at: IndexPath(row: numberOfItems, section: 0), at: .bottom, animated: false)
        }
    }
}

这是崩溃日志:

Fatal Exception: NSInternalInconsistencyException Attempted to scroll the collection view to an out-of-bounds item (20) when there are only 20 items in section 0. Collection view: <UICollectionView: 0x10b06f400; frame = (12 480.667; 396 355.333); clipsToBounds = YES; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x281d426d0>; layer = <CALayer: 0x280afe280>; contentOffset: {0, 568.33333333333337}; contentSize: {396, 876}; adjustedContentInset: {0, 0, 0, 0}; layout: <UICollectionViewFlowLayout: 0x107b3bab0>; dataSource: <NUP.VoiceRoomViewController: 0x10b019800>>.

PS: 我的CollectionView只有一节

如果您的集合视图有 20 个项目,它们将位于第 0 行到第 19 行。尝试滚动到与计数匹配的行将越过视图内容的末尾。

(如果您不能重现问题,我猜您正在使用不会导致实际滚动发生的值进行测试。)