求助:TableView分隔单元格为何莫名消失?
这种时好时坏、只在特定位置出现的分隔线消失问题真的很闹心,尤其是性格测试这种需要清晰区分每道题的场景,太影响用户体验了!结合我遇到过的类似情况,给你几个优先排查的方向:
先确认全局分隔线设置
检查有没有在viewDidLoad或者某个条件分支里误设置了tableView.separatorStyle = .none,或者separatorColor和单元格/TableView背景色完全一致,导致视觉上看起来消失了。可以先强制设置tableView.separatorStyle = .singleLine和一个明显的颜色测试下。排查单元格高度计算异常
分隔线消失大概率和单元格高度计算出错有关:- 如果用自动布局,试试临时设置固定行高
tableView.rowHeight = 60,看看分隔线是否恢复,以此判断是不是自动布局约束的问题; - 检查
heightForRowAt方法里的返回逻辑,有没有针对特定问题行返回了0或者异常小的数值,把分隔线挤没了。
- 如果用自动布局,试试临时设置固定行高
单元格复用时的属性重置
性格测试可能用到不同类型的单元格?如果复用池里的单元格没有正确重置分隔线相关属性,就容易出现部分行异常:
在cellForRowAt里明确设置分隔线的 inset 相关属性,比如需要全宽分隔线的话:cell.separatorInset = UIEdgeInsets.zero cell.preservesSuperviewLayoutMargins = false cell.layoutMargins = UIEdgeInsets.zero同时检查单元格的
prepareForReuse方法,有没有意外修改分隔线的样式或隐藏状态。内容溢出或视图裁剪问题
要是某几个问题对应的单元格内容过多,超出了单元格 bounds,可能会覆盖分隔线。给这些单元格加上clipsToBounds = true,或者检查约束确保内容不会越界。另外也看看tableView.clipsToBounds是不是设为false,导致部分分隔线被裁剪到视图外。
如果能提供cellForRowAt、heightForRowAt以及单元格布局相关的代码片段,能更快精准定位问题,但先从上面这些方向排查,应该能找到线索。
内容的提问来源于stack exchange,提问作者sheishistoric

