您的当前位置:首页正文

瀑布流练习遇到的问题

来源:要发发知识网

在做自定义瀑布流的时候,出了一个错误,搞了好久不知为何

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中清空数组或者初始化数组!!!