关于UITableView分割线不显示的几种可能和处理办法

今天测试反馈了一个很诡异的bug,长按cell进入编辑状态会导致分割线消失不见:

测试的截图

本来以为是常见的cell高度计算错误导致布局的时候cell重叠覆盖了分割线
但是!!!如果这么简单我就不会写这个分享了,当我开打Xcode的界面调试工具看UI的层级关系时,看到两个cell之间是有1px的间距的

两个cell之间是有1px的间距的

选中状态下会发现有很明显的白线

选中状态下会发现有很明显的白线,但是cellseperatorline却没有显示。
查了相关资料,产生上述情况有两种可能:

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];

猜测系统会隐藏分割线,所以这里要用tableViewupdate方法:

[self.tableView beginUpdates]; // 解决长按进入编辑状态时,当前cell上下的分割线消失的问题(原因猜测:cell选中状态系统默认隐藏分割线,因长按进入编辑,导致tableView恢复显示分隔线代码异常)
[self setEditing:YES animated:YES];
[self.tableView endUpdates];

最后

如果以后有朋友再遇到这种情况,不妨参考下以上的解决办法~(手动微笑)

推荐阅读更多精彩内容