gpt4 book ai didi

ios - UICollectionView 跳跃滚动

转载 作者:行者123 更新时间:2023-12-01 20:23:24 30 4
gpt4 key购买 nike

我正在尝试创建一个可以容纳不同大小的“ View ”等的界面。为此,我正在使用带有这些单元格的 UICollectionView:

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
Card *card = [[[usermanager getSelectedUser] getCards] objectAtIndex:indexPath.item];
UICollectionViewCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"cardCell" forIndexPath:indexPath];
[cell addSubview:card];

[cell.layer setBorderColor:[UIColor redColor].CGColor];
[cell.layer setBorderWidth:1.0f];
[cell.layer setMasksToBounds:NO];
return cell;
}

一切似乎都很好,直到卡片数量变得太大而我不得不滚动。当我滚动后抬起手指时, View 会稍微跳跃。我还遇到了一些其他奇怪的 UI 问题。从我读过的内容来看,这与滚动期间重新加载单元格有关。防止这种情况的正确方法是什么?

重要的是要注意内容是动态的。用户应该能够在运行时添加和移除卡片。

谢谢

最佳答案

您在评论中说您正在使用 CHTCollectionViewWaterFallLayout .
我自己在一个应用程序中使用过,从性能的角度来看,它不是最优的(我现在检查了源代码,关键点还是一样的)。我必须做一些调整才能让它顺利。

首先,如果您的目标是 iOS 8 及以上 ,对 UICollectionView 进行了巨大改进,如果可能的话,你绝对应该确保使用它。 2014 WWDC 视频 What's New in Table and Collection Views给你一个很好的概述。关键是iOS 8在UICollectionViewLayoutInvalidationContext中增加了三个新方法:

- invalidateItemsAtIndexPaths:
- invalidateSupplementaryElementsOfKind:atIndexPaths:
- invalidateDecorationElementsOfKind:atIndexPaths:

将这些方法与 UICollectionViewLayout invalidationContextForBoundsChange: 一起使用您可以极大地缩小布局需要处理的项目数量。这将为您提供最佳性能。

如果像我一样,你也需要定位 iOS 7 ,事情变得更加复杂。您可以改进布局中的两种关键方法:
  • 一、shouldInvalidateLayoutForBoundsChange:您在其中调查更改的边界并确保仅在绝对必要时才使完整布局无效。
  • 二、prepareLayout ,只有在整个布局应该失效时才应该调用它。

  • 在我的情况下,我必须添加 float 标题,所以我设置了一个属性 shouldInvalidateAllshouldInvalidateLayoutForBoundsChange: ,我 checkin 了 prepareLayout知道我是否真的需要从头开始准备布局。

    让它顺利进行实际上并不是那么容易(但可能),但我希望这为您的版本改进设置了一个起点。

    关于ios - UICollectionView 跳跃滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29165496/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com