使用系统的UITableView加载cell的时候经常会出现cell一上下滑动就错乱的情况。这个时候:
- 不复用,每个都重新创建。(内存消耗增加,页面卡顿。且部分场景不适用)
- 复用,但是需要解决视图错乱问题,通常都是reset数据源,重新对每一个可能错乱的地方重新赋值。
问题来了:
- 正常情况下cell展示出来后,想要动态变更高度只能再去刷新TableView达到效果。
- cell内部元素过多,label、text太多计算高度太费劲,UE太毒辣,要求一会展示一行,一会展示多行,一会全部展示。总之,计算起来头都大了。
- 本来好不容易计算好的页面,一滑动错乱了……cell复用有问题。
答案来了:
- 系统提供了TableView自动刷新的方法,无需手动获取TableView并刷新。
[tableView beginUpdates];
业务代码,cell变高在这里做
[tableView endUpdates];
- 这种情况使用系统的约束是最方便的,约束绑定到cell的底部,则系统会自动计算高度。无需再重新赋值。label可以通过优先级控制,hugging和compression了解一下。
IOS8以后的UITableView不需要再设置row高度,但是需要设置一个参数,给cell一个默认高度:
self.alertTableView.estimatedRowHeight = 100.0f;
- 单元格的复用,其实最好的解决办法就是针对每一个cell都做数据源绑定,必须绑定到每一个数据。如果出现model中不存在的数据,那么需要另外在内存中增加Dictionary来根据row一一对应cell的数据,在每次重用的时候根据row去获取cell数据并绑定。
BOOL isSelected = [[self.selectDic objectForKey:[NSString stringWithFormat:@"%ld",indexPath.row]] boolValue];
cell.isSelected = isSelected;
[self setCellContent:cell];
网友评论