【问题标题】:UICollectionView infinite scroll: reuses index paths and clears contentUICollectionView 无限滚动:重用索引路径并清除内容
【发布时间】:2013-04-01 10:15:54
【问题描述】:

使用a previous question的答案,我做了一个无限滚动。但是,滚动时出现问题。

似乎有一毫秒,UICollectionView(或者可能是UIScrollView)认为显示的单元格不再可见,因此将单元格重用于新单元格。这导致滚动时单元格被双重使用。 我认为这是我的问题的原因是因为为了能够无限滚动而使用的“作弊”是重置UIScollViewcontentOffset

我的UICollectionView 的单元格包含使用MKNetworkKit 异步下载(从缓存中获取)的背景图像。 另一个副作用之一是,当连续滚动视图“屏幕长度”时,屏幕会被截断。几乎就像在UIScrollView 中发生了reloadData,但代码根本没有重新加载数据。

我的问题是:如何防止 UICollectionView 重复使用可见单元格和突然截断视图?

【问题讨论】:

  • 这不是您的问题的解决方案,但请通过bugreport.apple.com 在 UICollectionView (iPhone SDK) 上提交增强请求以支持循环内容。我不久前提出了类似的请求,如果有足够的需求,Apple确实会阅读并响应此类请求。
  • 我不确定滚动过程中“屏幕被截断”是什么意思。您能否再描述一下,这是整体视图还是单元格的问题?
  • 您使用的是自定义集合视图布局吗?
  • @Wain 我的意思是屏幕突然变空,即使单元格应该在屏幕上显示内容。它是随机发生的。
  • 确认基础,是与内容偏移重置相关的截断(不应该是随机的),以及您如何决定何时重置(是任意的还是在内容边界的精确页面高度)?

标签: ios objective-c cocoa-touch uiscrollview uicollectionview


【解决方案1】:

看起来我看到旋转设备时重复使用可见单元格。 我用来自网络图像搜索的图像填充屏幕,并使用固定尺寸来准确填充纵向和横向的 UICollectionView 边界。但是拉伸图像会丢失我设置的大小,并且在旋转(也称为重新加载数据)时看到重复使用或更多单元格。 我在重新加载之前(在collectionView:numberOfItemsInSection :)从我想要的图像数量计算当前图像大小来解决它。准确的图像适合防止我额外加载和重复使用。

【讨论】:

    【解决方案2】:

    有 2 个重用标识符。当您重置 contentOffset 在它们之间切换时。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-09
      • 2016-01-12
      • 1970-01-01
      • 2013-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多