今天在设置tableviewCell的分割线的时候,尝试了几种方法
这里涉及到两个概念:
tableview的属性:
tableFooterView
Tableview的代理方法中,设置的section的
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
和- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
这里分析下两个的区别:
tableviewFooterView,是整个tableview的footer
而代理方法中设置的,是每个section footer的高度和页面
然后来说tableview中设置分割线的问题:
- 上面说的两条属性都不设置的时候:是这样的效果
然后我们只设置代理:
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
return [UIView new];
}
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
return CGFLOAT_MIN;
}
效果如下:
然后我们可以修改一些参数:
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
return [WDTool createLineWithFrame:CGRectMake(15, 0, SCREENWIDTH - 30, 0.5) color:UIColorFromRGB(0xdddddd)];
}
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
return 0.5f;
}
比如生成一条0.5px的线,效果又变成了这样:
但是有个问题:我们设置生成的线是距离左右边各15px的距离,但是效果图可以看到是左右贯穿的。
所以,如果需求是要设置全部cell的分割线是左右贯穿的话,可以使用这种方法
首先要配置cell的separatorInset属性为.Zero
cell.separatorInset = UIEdgeInsetsZero;
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
return [WDTool createLineWithFrame:CGRectMake(0, 0, SCREENWIDTH, 0.5) color:UIColorFromRGB(0xdddddd)];
}
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
return 0.5f;
}
效果图:
然后我们只设置 self.tableview.tableFooterView = [UIView new];
可以看到这个就是我们想要的结果:
第一行上边没有分割线,最后一行下边有分割线。
总结一下:
知识点:
Cell的separatorInset属性, 可以设置分割线的间距(.Zero属性为贯穿屏幕)
tableview的separatorStyle属性:可以设置有没有分割线
tableview的sectionFooter代理方法:如果返回了空view,则没效果,如果返回了非空view,则可隐藏没有数据的cell的分割线,然后在section最后一个cell的底部生成一个贯穿屏幕的高度自定的view
tableview的tableFooterView属性:如果设置等于空view,则可以隐藏没有数据的cell的分割线,然后在最后一个section的最后一个cell上,添加一个跟cell是separatorInset属性匹配的分割线。
案例:
上下都要分割线的情况:
自定义cell,然后在cell上自己放两个线,然后设置 self.tableview.separatorStyle = UITableViewCellSeparatorStyleNone;最上面没有分割线,最下边也没分割线:
设置代理方法,返回一个空的view([UIView new])高度返回 CGFloat_MIN
- 最上面没有分割线,最下边有贯穿的分割线(跟别的cell的分割线风格不匹配)
设置代理方法,返回一个非空的view并设置想要的高度,即可
- 最上面没有分割线,最下边有跟别的cell匹配的分割线
只设置 self.tableview.tableFooterView = [UIView new];即可