UITableView Cell 自动布局遇到的坑。

第一坑

最近在项目中使用了UITableView的自动布局如下

   _tableView.estimatedRowHeight = 10;

   _tableView.rowHeight = UITableViewAutomaticDimension;

实用如上代码的第一点坑,是estimatedRowHeight的只不能再0到1之间(不包括0 ,但是包括1) 如果你在设置的时候后不小心设置到了在0~1之间的数字,恭喜你,你会在[tableView reloadDate]的时候崩溃, 解决办法要设置在大约1的情况下才能正常运行。

第二坑

在时候用自动化布局运行在IOS11以上的系统上你根本不会发现相应的问题,UI布局,各方面展示都是正常的,跑起来你也会觉得舒心,但是在IOS11以下跑这段代码,在[tableView reloadDate] 如果你没有在上面添加Scetion还好,问题也不会出现,但是当你有要加入sectionView的需求的时候在刷新你会发现SectionVIew 就像一个不定的家伙,在reloadData结束之后 他的位置乱跑,在任何地方都可以出现,页面出现闪烁。

这个问题完全是你使用了,UITableView的自适应高度造成的,这个问题要就解决你需要在自动布局的代理里面本地保存下来Cell的高度,不让他每次都要计算高度,这样就不会出现闪烁。 这样就需要你保存高度,争取只让他们自动算高度一次,不要每次都要自动算,如果每次都要自动算,第一性能消耗会大,表有事也会出现卡顿的现象,

保存Cell高度实用代理

-(CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath{

    NSNumber *height = [self.indexPathArray objectForKey:indexPath];

    if(height){

        return height.floatValue;

    }else{

        return 100;

    }

}

 

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{

    NSNumber *height = @(cell.frame.size.height);

    [self.indexPathArray setObject:height forKey:indexPath];

}

 

同样的要是自使用TableHeadView 也需要这样做,自适应虽然省事也是苹果给我们提供的方便的方法,但是实用的时候回遇到一些奇怪的问题,需要我们自己去寻找方法解决,

你可能感兴趣的:(object_c)