Rob*_*egg 5 iphone objective-c ios uicollectionviewcell uicollectionviewlayout
我在 UIViewController 中有一个 UICollectionView 。我还有两种不同的布局,当按下按钮时我会更改为它们。
我在两个 nib 文件中创建的两个单元格之间的布局发生变化。由于这两个单元格做了相同的更改,并且它们的布局只是不同 - 我为它们使用了相同的类,它是 UICollectionViewCell 的子类。
因此,当我的视图加载时,我注册我的两个单元格,如下所示:
[self.tradeFeedCollectionView registerNib:[UINib nibWithNibName:@"BBItemTableViewCell" bundle:nil] forCellWithReuseIdentifier:@"TableItemCell"];
[self.tradeFeedCollectionView registerNib:[UINib nibWithNibName:@"BBItemGridViewCell" bundle:nil] forCellWithReuseIdentifier:@"GridItemCell"];
Run Code Online (Sandbox Code Playgroud)
这两个布局都是 UICollectionViewFlowLayout 的子类。在布局子类中,我只使用一种方法来设置布局/单元格的大小和间距 - 如下所示:
-(id)init
{
self = [super init];
if (self){
self.itemSize = CGSizeMake(320, 80);
self.minimumLineSpacing = 0.1f;
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
这是因为在更改视图时单元格始终具有正确的大小。
要更改视图,我有一个 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";
}
Run Code Online (Sandbox Code Playgroud)
通过上面的代码,我得到了一个很好的动画,并且两个单元格之间的视图发生变化。
问题
更改视图时,UICollectionView 的可见区域会留下旧单元格,并且尚未更新为新单元格。这些牢房实际上已经改变了形状,但旧牢房的景色却被留下了。当我开始滚动时 - 单元格显示正确并且所有旧单元格都消失了。
**我尝试过的**
我发现调用这段代码:
[self.collectionView reloadItemsAtIndexPaths:[self.collectionView indexPathsForVisibleItems]];
Run Code Online (Sandbox Code Playgroud)
在我改变布局之后,问题得到了一些解决——但是,我失去了动画,看起来很奇怪。
我实际上解决了这个问题:
在这里查看我的问题:Calling setCollectionViewLayout:animated does not reload UICollectionView
我用适合我的解决方案更新了我的问题。
| 归档时间: |
|
| 查看次数: |
5055 次 |
| 最近记录: |