UICollectionView 在 reloadData 后在屏幕外崩溃时崩溃

Posted

技术标签:

【中文标题】UICollectionView 在 reloadData 后在屏幕外崩溃时崩溃【英文标题】:UICollectionView crashes after reloadData while it is out of screen 【发布时间】:2013-01-04 15:31:17 【问题描述】:

在我的应用程序中,我有一个 UICollectionView 和一个 UITableView。我使用电视进行导航,使用简历进行详细介绍。用户可以更改电视和 CV 的宽度(每次平移;像灵活的UISplitViewController)。

当用户在电视中选择一个项目时,应用程序会使用相应的详细信息项目更新 CV。我用

[myCV reloadData];

用于更新简历。当 CV 可见时,这非常有效。

允许用户将导航电视缩放到最大(全屏宽度) - 为此我将 CV 宽度设置为零。当 CV 不可见时,用户选择另一个项目 (-> cv reloadData),然后用户重新打开 content-CV,出现以下错误:

由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“当集合视图中只有 1 个部分时,请求第 2 部分之前的项目数”

到目前为止,我可以弄清楚 - CV 在 reloadData 时不会正确更新自身,当它不可见时(因为它的宽度为零,或者它在屏幕外,或者被另一个视图隐藏)。当我再次将 CV 宽度设置为 > 0 的值时,会发生错误。看来 CV 句柄仍然是旧的 cellItems 而不是 dataDelegate 提供的新 cellItems。

知道如何解决这种情况吗?

【问题讨论】:

【参考方案1】:

我通过变通方法解决了这个问题。

在我将内容视图设置为零宽度之前,我从其父视图中删除了内容视图。而且我没有将内容视图宽度设置为0。当用户再次滑动内容视图打开时,我应该设置宽度> 0,我再次将视图添加到它的超级视图,然后将新宽度设置到它的框架.

它不是很优雅,但像魅力一样。

【讨论】:

以上是关于UICollectionView 在 reloadData 后在屏幕外崩溃时崩溃的主要内容,如果未能解决你的问题,请参考以下文章

在布局更改的同时重新加载/动画 UICollectionView

iOS 6 和 iOS 7 上的 UICollectionView 重新加载

iOS Tips: Note1

iOS解决UICollectionView中使用reloadItemsAtIndexPaths进行局部cell更新导致视图重叠问题

如何在重新加载时清除 UICollectionViewCell?

location.reload() 在移动设备中无法正常工作