今天测试反馈了一个很诡异的bug,长按cell进入编辑状态会导致分割线消失不见:
本来以为是常见的cell高度计算错误导致布局的时候cell重叠覆盖了分割线。
但是!!!如果这么简单我就不会写这个分享了,当我开打Xcode的界面调试工具看UI的层级关系时,看到两个cell之间是有1px的间距的
选中状态下会发现有很明显的白线,但是
cell
的seperatorline
却没有显示。查了相关资料,产生上述情况有两种可能:
1. 精度丢失
计算cell的高度结果可能是个精度很长的float类型,这样tableView在渲染的时候会导致精度丢失。
解决这种情况最好在ceil
, floor
对最后的结果取整。这样避免渲染的时候系统精度四舍五入丢失精度
+ (float)heightForFolder:(UDAbstractFileModel *)folder
{
NSString *fileName = folder.filename;
CGSize size = [fileName sizeWithFont:[UIFont systemFontOfSize:15] forWidth:SCREEN_WIDTH - 102];
return ceilf(size.height + 45);
}
2.编辑状态系统会隐藏一下分割线
这里直接调用
[self.tableView setEditing:editing animated:animated];
猜测系统会隐藏分割线,所以这里要用tableView
的update
方法:
[self.tableView beginUpdates]; // 解决长按进入编辑状态时,当前cell上下的分割线消失的问题(原因猜测:cell选中状态系统默认隐藏分割线,因长按进入编辑,导致tableView恢复显示分隔线代码异常)
[self setEditing:YES animated:YES];
[self.tableView endUpdates];
最后
如果以后有朋友再遇到这种情况,不妨参考下以上的解决办法~(手动微笑)