当我们使用UITableView 时,单独处理某一个分割线成了很头疼的问题。在项目初期我们可以选择自定义分割线的方案进行处理,一旦页面进度较久时再进行重构,无疑很痛苦<所以前期一定要看清楚 UI 图的细节啊啊啊~~~>。
通过打印 cell的 subviews,我们可以一窥 cell 的内部结构。
for (UIView *subView in self.subviews) {
NSLog(@"cellSub === %@",subView);
}
观察打印结果我们会发现一个 '_UITableViewCellSeparatorView'视图,而它,就是 cell 上的分割线。
既然找到了对象,那我们就可以对其进行处理了。我们可以通过在 cell 内重写 - (void)addSubview:(UIView *)view 方法来拦截分割线被添加的过程。
大致如下:
- (void)addSubview:(UIView *)view {
if (self.indexPath.item == 0) {
if (view && ![view isKindOfClass:[NSClassFromString(@"_UITableViewCellSeparatorView") class]]) {
[super addSubview:view];
}
}
else {
if (view) {
[super addSubview:view];
}
}
}
这样我们就处理了分区内第一个 cell 的底部分割线的移除工作。其他线条也类似,改变下判断条件就 OK 了。
另外如果我们的 UITableView 的类型是 grouped,我们会发现在每个分区第一个 cell 的顶部也会出现一条分割线<(⊙v⊙),就是这么蛋疼~>,这个时候我们可以结合视图的类型以及 y 轴的坐标值进行判断进而处理。简直 so easy~~~
以上。