ios - UICollectionView 在更改布局时显示旧单元格

标签 ios iphone objective-c uicollectionviewcell uicollectionviewlayout

我在 UIViewController 中有一个 UICollectionView。我还有两种不同的布局,当按下按钮时我会更改它们。

我在两个 nib 文件中创建的两个单元格之间的布局发生变化。由于这两个单元格进行相同的更改并且它们的布局只是不同 - 我对它们都使用了相同的类,它是 UICollectionViewCell 的子类。

因此,当我的 View 加载时,我注册了我的两个单元格,如下所示:

[self.tradeFeedCollectionView registerNib:[UINib nibWithNibName:@"BBItemTableViewCell" bundle:nil] forCellWithReuseIdentifier:@"TableItemCell"];
[self.tradeFeedCollectionView registerNib:[UINib nibWithNibName:@"BBItemGridViewCell" bundle:nil] forCellWithReuseIdentifier:@"GridItemCell"];

这两个布局都是 UICollectionViewFlowLayout 的子类。在布局子类中,我只使用一种方法来设置布局/单元格的大小和间距 - 如下所示:

-(id)init
{
    self = [super init];

    if (self){

        self.itemSize = CGSizeMake(320, 80);
        self.minimumLineSpacing = 0.1f;
    }

    return self;
}

这是因为单元格在更改 View 时始终具有正确的大小。

要更改 View ,我有一个具有以下代码的 UIButton:

[self.tradeFeedCollectionView.collectionViewLayout invalidateLayout];

if (!self.gridLayoutActive){

    self.gridLayoutActive = YES;
    [self.tradeFeedCollectionView setCollectionViewLayout:self.grideLayout animated:YES];
    self.lastLayoutUsed = @"GridLayout";

}

else {

    self.gridLayoutActive = NO;

    [self.tradeFeedCollectionView setCollectionViewLayout:self.tableViewLayout animated:YES];
    self.lastLayoutUsed = @"TableLayOut";
}

通过上面的代码,我得到了一个漂亮的动画,并且 View 在两个单元格之间发生了变化。

问题

当更改 View 时,UICollectionView 的可见区域有旧单元格留在后面并且没有更新为新单元格。单元格实际上已经改变了形状,但是旧单元格的 View 被留下了。当我开始滚动时 - 单元格正确显示并且所有旧单元格都消失了。

**我试过的**

我发现调用这段代码:

[self.collectionView reloadItemsAtIndexPaths:[self.collectionView indexPathsForVisibleItems]];

在我更改布局后稍微解决了这个问题 - 但是,我松散了动画并且看起来很奇怪。

最佳答案

我实际上解决了这个问题:

在这里查看我的问题:Calling setCollectionViewLayout:animated does not reload UICollectionView

我用适合我的解决方案更新了我的问题。

关于ios - UICollectionView 在更改布局时显示旧单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22533233/

相关文章:

objective-c - Obj-, 'self'没有设置为 '[(super or self) init...]'的结果时使用的实例变量

ios - 像素缓冲区不会附加到设备上的 AVAssetWriterInput

iPhone SDK - UIButton突出显示状态问题

iphone - Objective-C - 如何保存和加载包含图像的数组

iphone - iOS旋转矩阵解释

ios - 自其他 View 以来,如何更新 UITableViewController?

ios - 从另一个类访问 viewController 元素

ios - 如何将 UIImages 数组添加到 Collection View

ios - 来自搜索的 TableView 数据未正确更新

objective-c - Xcode 错误 : Expected identifier