iOS tableview中分割线的设置

今天在设置tableviewCell的分割线的时候,尝试了几种方法

这里涉及到两个概念:

  1. tableview的属性: tableFooterView

  2. Tableview的代理方法中,设置的section的 - (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section

这里分析下两个的区别:

tableviewFooterView,是整个tableview的footer

而代理方法中设置的,是每个section footer的高度和页面

iOS tableview中分割线的设置_第1张图片
image.png

然后来说tableview中设置分割线的问题:

  1. 上面说的两条属性都不设置的时候:是这样的效果
iOS tableview中分割线的设置_第2张图片
image.png

然后我们只设置代理:

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {

    return [UIView new];

}

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {

    return CGFLOAT_MIN;

}

效果如下:

iOS tableview中分割线的设置_第3张图片
image.png

然后我们可以修改一些参数:

- (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的线,效果又变成了这样:

iOS tableview中分割线的设置_第4张图片
image.png

但是有个问题:我们设置生成的线是距离左右边各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;

}

效果图:

iOS tableview中分割线的设置_第5张图片
image.png

然后我们只设置 self.tableview.tableFooterView = [UIView new];

iOS tableview中分割线的设置_第6张图片
image.png

可以看到这个就是我们想要的结果:

第一行上边没有分割线,最后一行下边有分割线。

总结一下:

知识点:

  • Cell的separatorInset属性, 可以设置分割线的间距(.Zero属性为贯穿屏幕)

  • tableview的separatorStyle属性:可以设置有没有分割线

  • tableview的sectionFooter代理方法:如果返回了空view,则没效果,如果返回了非空view,则可隐藏没有数据的cell的分割线,然后在section最后一个cell的底部生成一个贯穿屏幕的高度自定的view

  • tableview的tableFooterView属性:如果设置等于空view,则可以隐藏没有数据的cell的分割线,然后在最后一个section的最后一个cell上,添加一个跟cell是separatorInset属性匹配的分割线。

案例:

  1. 上下都要分割线的情况:
    自定义cell,然后在cell上自己放两个线,然后设置 self.tableview.separatorStyle = UITableViewCellSeparatorStyleNone;

  2. 最上面没有分割线,最下边也没分割线:

设置代理方法,返回一个空的view([UIView new])高度返回 CGFloat_MIN

  1. 最上面没有分割线,最下边有贯穿的分割线(跟别的cell的分割线风格不匹配)

设置代理方法,返回一个非空的view并设置想要的高度,即可

  1. 最上面没有分割线,最下边有跟别的cell匹配的分割线

只设置 self.tableview.tableFooterView = [UIView new];即可

参考链接

UITableView设置全屏分隔线的几种方法比较

你可能感兴趣的:(iOS tableview中分割线的设置)