问题
最近项目中遇到同一个 UITableView 第一分区的列表是 卡片样式 不需要分割线, 但是第二分区的样式是 普通样式 , 需要 分割线.
以往有 2 种的做法是:
第一种: 自己绘制分割线
1
tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
然后在需要分割线的 Cell 中自己划线, 但是 区首 和 区尾 的分割线宽度是 屏幕宽度 , 其他 Cell 的分割线跟屏幕有 15 的间隔. 这时候就需要区分区首和区尾来进行不同的绘制处理 (也可能是 CALayer/UIView).
一般来说部推荐使用
drawRect:进行绘制.
第二种: 配置相关属性
对不需要分割线的 Cell 进行如下修改:
1
cell.separatorInset = UIEdgeInsetsMake(0, SCREEN_WIDTH, 0, 0);
此种处理办法虽然可以一定程度上解决我们的问题, 但是
Header和Footer的分割线无法取消.UITableViewCell的实例对象中, 一般的Cell只有1条分割线, 区首的Cell有2根分割线,顶部分割线&底部分割线. 通过valueForKey:使用_topSeparatorView,_separatorView可以分别获取到分割线对象. 但是要在合适的时机,init方法内是无法获取到的. 经测试, 顶部的Cell总是会被复用再第一个位置 (目前测试是这样的), 还未测出其他情况.
因此对 _topSeparatorView 和 _separatorView 设置 hidden = YES 可以解决掉 Header 的底部分割线和一般 Cell 的分割线, 区尾的分割线无法隐藏 (原因未知), 使用 Debug View 也找不到底部分割线.
解决办法
通过遍历 UITableView 的 methodList 发现有如下方法:
1
- (void)setSeparatorColor:(id)arg1;
该方法是设置分割线颜色的方法, 如果让此方法失效, 分割线会是什么颜色呢?
尝试重写该方法为空实现:
1
- (void)setSeparatorColor:(id)arg1 {}
结果来看, 成功解决了 Cell, Header, Footer 的分割线. 目前应该是最简单的处理方法.
- 不用自己绘制.
 - 处理彻底.
 - 操作简单.
 
如果你页游这样的问题, 可以使用这个方法试一下.
其他提示 再
- (void)setSeparatorColor:(id)arg1中, 传入的arg1类型为UIDeviceRGBColor类型. 通过super调用setSeparatorColor:会死循环.