解決UICollectionView的Cell復用引起的布局混亂問題
問題復現.gif
查了一下度娘發現沒有好的解決辦法,於是發動自己的聰明才智,終於找到如下解決辦法(充分證明了自己動手豐衣足食啊😄)
-
首先創建一個可變數組,用來存放Cell的唯一標示符
// 用來存放Cell的唯一標示符 @property (nonatomic, strong) NSMutableDictionary *cellDic; #warning 別忘了初始化喲 self.cellDic = [[NSMutableDictionary alloc] init]; -
在cellForItemAtIndexPath:這個方法中作相應的一些處理即可,代碼如下
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
// 每次先從字典中根據IndexPath取出唯一標識符
NSString *identifier = [_cellDic objectForKey:[NSString stringWithFormat:@"%@", indexPath]];
// 如果取出的唯一標示符不存在,則初始化唯一標示符,並將其存入字典中,對應唯一標示符注冊Cell
if (identifier == nil) {
identifier = [NSString stringWithFormat:@"%@%@", DayCell, [NSString stringWithFormat:@"%@", indexPath]];
[_cellDic setValue:identifier forKey:[NSString stringWithFormat:@"%@", indexPath]];
// 注冊Cell
[self.collectionView registerClass:[CalendarCollectionViewCell class] forCellWithReuseIdentifier:identifier];
}
CalendarCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
// 此處可以對Cell做你想做的操作了...
return cell;
}
修改之后的效果圖如下所示
修改之后的效果圖.gif
