问题
最近项目中遇到同一个 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:
会死循环.