预先填充UICollectionView单元重用队列
问题
我有一个应用程序与一个单一的UICollectionView
,这是第一次口吃,我滚动它。 我已经把源代码缩小到新的单元格(2)正在被创build的事实(使用initWithFrame:
因为没有单元格躺在被重用。 在第一次滚动之后,重用队列不是空的,单元格可以重复使用,不会出现口吃。
黑客
所以我已经能够在iOS运行时头文件中的私有方法的帮助下解决这个问题:
- (void)_reuseCell:(id)arg1;
我的假设是,这是细胞被添加到重用队列中的地方。 使用这个未logging的方法的黑客看起来像这样:
int prefillCellCount = 10; NSMutableArray *cells = [[NSMutableArray alloc] initWithCapacity:prefillCellCount]; for (int i=0; i<10prefillCellCount i++) { UICollectionViewCell *cell = [self.gridView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:[NSIndexPath indexPathForRow:i inSection:0]]; [cells addObject:cell]; } for (UICollectionViewCell *cell in cells) { [self.gridView _reuseCell:cell]; }
黑客的作品! 滚动时没有口吃。
问题
我不认为我能通过这个黑客过去的App Store审查。 有没有办法做到这一点,而不使用无证方法? 如果没有,是我唯一的手段只是混淆黑客?
有没有办法做到这一点,而不使用无证方法?
如果问题只是需要很长时间来创build单元格,那么您可以简单地创build一些附加function,并将其保留在视图控制器中,直到收集请求为止。 已经在代码中预先分配了一些单元格,调用dequeueReusableCellWithReuseIdentifier:
获取集合为您创build它们。 将它们保存在视图控制器的数组中。 接下来,在你的...cellForItemAtIndexPath:
方法中,如果数组不是空的,则从数组中删除一个单元格,并使用它而不是要求集合视图为可重用的单元格。
这应该通过移动创build单元格的位置而不使用任何未公开的方法来解决您的问题。
另一种方法是加快细胞的创build过程,这样你就不必打扰预先分配的细胞。 分析您的代码,了解您的细胞为何需要花费这么长的时间来构build 也许你可以通过消除不必要的视图来简化你的单元结构
- 通过触摸Swift来检测应用程序何时处于活动状态或不活动状态
- 使用UITextView属性在Swift中自定义UIView的加载时间较慢
- 故事板中的视图太多 – Xcode运行缓慢
- CoreAnimation性能分析 – 带有CAShapeLayer的CAReplicatorLayer
- 为什么Rand()总是生成具有固定唯一组数的随机数?
- UIDocument&NSFileWrapper体系结构和性能
- 如何分析线程的堆栈跟踪信息?
- UIView性能:不透明,backgroundColor,clearsContextBeforeDrawing?
- Png的iOS – png的捆绑vs下载 – png8 vs png24