Auto sizing cell -estimatedRowHeight属性

在开发中,UITableView的cell用自动布局,这样无需计算每个cell的高度,只要设置正确控件的约束,系统会自动为我们进行高度计算,这样可以省下很多代码逻辑。在使用过程中,笔者遇到了一个小bug: 切换完筛选条件之后,重新调用接口获取数据,然后reloaddata,同时希望tableView滚动到顶部的cell,使用[tableView setContentOffset:CGPointMake(0, 0) animated:NO];方法。但是,tableview无法滚动到最顶部的cell,对显示效果产生了影响。

参考了1 2之后,发现是因为estimatedRowHeight这个预估高度设置的不够准确

estimatedRowHeight是否可以随便设值?

虽然系统会自动帮我们调整cell的高度,而estimatedRowHeight的初始默认高度似乎没用,其实不然,estimatedRowHeight越接近cell的最终高度越好,因为cell的调整高度重绘cell会浪费程序的运行,就会相应的耗费资源。

因此可能会产生一些坑,比如设置初始值差距较大时,在调用scrollToRowAtIndexPath:滚动到最底部的方法时。就有可能出现此方法运行完了,cell的高度还没有调整完,导致视图显示不是最底部的小BUG.

避免的方法

1.用dispatch_after一个很短的时间再去scrollToRowAtIndexPath。

2.设定estimatedRowHeight尽量接近最终的高度。