ios那些事儿

tableView上拉刷新上下跳动

2017-11-14  本文已影响8人  4VZhang

上tableView部分代码:

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return self.sitcomListM.data.videos.count ? self.sitcomListM.data.videos.count+1 : 1;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
       if (!self.sitcomListM.data.videos.count) {
        
        JSBNoDataCell *noDataCell = [tableView dequeueReusableCellWithIdentifier:kNoDataCellReuseID forIndexPath:indexPath];
        noDataCell.errorMsg = @"微客堂列表为空,请稍后刷新";
        noDataCell.selectionStyle = UITableViewCellSelectionStyleNone;
        
        return noDataCell;
    }else {
        if ( !indexPath.row) { // 会员卡提示栏
            
            JSBVipPurchaseCell *cell = [tableView dequeueReusableCellWithIdentifier:kVipCellReuseID forIndexPath:indexPath];
            [cell configureWithDataModel:self.sitcomListM.data buttonClickBlock:nil ];
            return cell;
            
        }else{ //  视频列表
            
            JSBMoviePlayCell *cell = [tableView dequeueReusableCellWithIdentifier:kTableViewCellReuseID forIndexPath:indexPath];
            cell.selectionStyle = UITableViewCellSelectionStyleNone;
            //设置 cell 的数据
            JSBMoviePlaySitcomListDataVideosModel *videosM =  self.sitcomListM.data.videos[indexPath.row-1];
            cell.videosM = videosM;
            return cell;
        }
    }
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
     if (!self.sitcomListM.data.videos.count) {
            return UITableViewAutomaticDimension;
        }
    return indexPath.row == 0 ?(!_type?36:186):186;
}

- (UITableView *)tableView {
    if (!_tableView) {
        // 底部 tableView
        _tableView = [[UITableView alloc]initWithFrame:CGRectZero style:UITableViewStylePlain];
        _tableView.estimatedRowHeight = 215;
        _tableView.separatorStyle = UITableViewCellSelectionStyleNone;
        
        [_tableView registerClass:[moviePlayCell class] forCellReuseIdentifier:kTableViewCellReuseID];
        [_tableView registerClass:[vipPurchaseCell class] forCellReuseIdentifier:kVipCellReuseID];
        [_tableView registerClass:[noDataCell class] forCellReuseIdentifier:kNoDataCellReuseID];
        
        _tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewest)];
        _tableView.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadHistory)];
        
        _tableView.tableFooterView = [UIView new];
        _tableView.dataSource    = self;
        _tableView.delegate      = self;
    }
    return _tableView;
}
上拉刷新界面跳动bug.gif

界面在cell铺满整个屏幕是,上拉/下拉刷新 都没明显跳动;
界面中cell个数较少,不能铺满整个屏幕时,下拉刷新没有明显跳动,上拉刷新有明显跳动,并且会出现如下图的bug;

上拉刷新界面上下跳动bug.png

经过排除mjrefresh控件和项目中数据问题,最后bug问题锁定在tableview的预估行高(215)超出实际行高差距(36)太多导致出现上拉刷新跳动并出现相关bug;

         预估行高设置为50
        _tableView.estimatedRowHeight = 50;

该bug得以解决!

上一篇下一篇

猜你喜欢

热点阅读