在做自定义瀑布流的时候,出了一个错误,搞了好久不知为何
2017-02-27 16:07:36.025 瀑布流练习[1022:450207] *** Assertion failure in -[UICollectionViewData validateLayoutInRect:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit/UIKit-3512.60.12/UICollectionViewData.m:408
经过多方对比调试才发现为什么出错
@interface HPCollectionViewFlowLayout ()
/** 存储每一列最大Y值*/
@property (strong, nonatomic) NSMutableArray *columnMaxYs;
/** 存放所有cell的属性*/
@property (strong, nonatomic) NSMutableArray *cellAttrsArray;
@end
里面有两个属性,在实现- (void)prepareLayout
这个方法的时候忘记清空,导致在ViewController中加载更多数据后调用- (void)reloadData
时候,出现错误以上错误
#pragma mark - 实现内部的方法
- (void)prepareLayout
{
[super prepareLayout];
// 设置默认值
self.rowSpace = DEFAULTSPACE;
self.columnSpace = DEFAULTSPACE;
self.cellColumn = DEFAULTCOLUMN;
self.sectionEdgeInsets = UIEdgeInsetsMake(DEFAULTSPACE, DEFAULTSPACE, DEFAULTSPACE, DEFAULTSPACE);
[self.cellAttrsArray removeAllObjects];
// 重置每一列的最大值
[self.columnMaxYs removeAllObjects];
for (int column=0; column < self.cellColumn ; column++) {
[self.columnMaxYs addObject:@(DEFAULTSPACE)];
}
}
所以重要的事情说三遍,一定要在- (void)prepareLayout
中清空数组或者初始化数组!!!
所以重要的事情说三遍,一定要在- (void)prepareLayout
中清空数组或者初始化数组!!!
所以重要的事情说三遍,一定要在- (void)prepareLayout
中清空数组或者初始化数组!!!
网友评论