【问题标题】:Empty collection view crashes when refreshing due to scrolling由于滚动而刷新时,空集合视图崩溃
【发布时间】:2021-12-13 02:45:05
【问题描述】:

我的水平集合视图(仅当它有 0 个单元格时)在尝试刷新父视图时会导致崩溃。当集合视图有 0 个项目(即“shownStations”)时,集合视图被隐藏。刷新父视图时,会进行 API 调用以获取集合视图的任何可用项。似乎与错误消息相关的集合视图的代码(如下)如下:

        if self.shownStations.isEmpty {  
            self.stationCollectionView?.frame = CGRect(x: 0, y: 0, width: 0, height: 0)
        } else {
            self.stationCollectionView?.frame = CGRect(x: 0, y: 0, width: 414, height: 150)
        }

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        if !self.hiddenStations.isEmpty {
            return shownStations.count + 1
        } else {
            return shownStations.count
        }
    }

错误信息: *** 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“当第 0 节中只有 0 个项目时,尝试将集合视图滚动到越界项目 (0)。集合视图:<0x7fc5b101f800 clipstobounds="YES;自动调整大小" rm>

    标签: swift xcode uicollectionview


    【解决方案1】:

    您程序中的某个地方可能有人在调用scrollToItems(at:,scrollPosition:)。他们要么不知道集合是空的,要么只是将(row:0, item:0) 作为索引路径传入,而不是完全跳过滚动调用。或者他们认为您的收藏至少包含一项。

    为了进一步诊断问题,我要么在异常上设置断点,要么在 UIScrollView 函数上设置断点,然后查看回溯以查看是谁在进行调用。

    您还想检查您的数据源,以确保在滚动发生时它已更新为正确数量的项目。

    但是有一个回溯来找出导致滚动视图滚动的是谁或什么将是一个很好的第一步。

    【讨论】:

    • 我有一个相同的场景,可以在滚动或单击按钮时移动收藏视图卡。当我很确定集合视图不为空时,你能指导我为什么这个 scrollToItems(at:,scrollPosition:) 方法给我错误......?以前它工作正常,现在它给我错误。
    猜你喜欢
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-14
    • 1970-01-01
    相关资源
    最近更新 更多