删除TableView中单个cell的分割线

前言

在iOS开发中,我们最常使用的UIKit控件之一就是UITableView,默认情况下我们可以通过UITableView的separatorStyle属性来更改所有cell的分割线样式,但是有时我们会遇到需要更改单独一个cell的分割线的需求,比如删除最下面一行cell的分割线,这是separatorStyle属性就不能满足要求了。为了达到目的我们可以采用的方法之一是将separatorStyle设置成为UITableViewCellSeparatorStyleNone,去掉默认的分割线,然后自定义cell,手动在需要的行添加分割线,这么做灵活性很高,适用于各种UITableView的使用场景。

上面提到的方法在某些简单的场景中显得过于复杂,比如用于不可滚动的TableView中。本文将介绍另一种实现此需求的简单方法。

实现思路

本方法是通过调整UITableViewCell的separatorInset属性来实现删除单个cell的分割线。

在iOS7之前可以通过增大分割线左侧的inset使整个分割线移出屏幕,但是到了iOS8及以后的版本中,系统不再允许将分割线移出屏幕,因此我们必须另想其他方法。因为UITableViewCell的separatorInset可以同时设置分割线左端和右端的inset,因此当我们将两端的inset分别设置为整个cell宽度的一半时,就会将中间的分割线的宽度压缩至0,此时相当于将该cell的分割线删除。

实现方法

因为此方法是根据当前cell宽度来计算并压缩分割线的,所以要考虑到当cell宽度改变时,比如orientation改变,需要重新计算inset的宽度,所以我们将在viewWillLayoutSubviews中进行处理,实现如下:

- (void)viewWillLayoutSubviews {
    [super viewWillLayoutSubviews];
    
    //除去最后一个TableViewCell下方的分割线
    UITableViewCell *cell = [self.tableView.visibleCells lastObject];
    cell.separatorInset = UIEdgeInsetsMake(0, CGRectGetWidth(cell.bounds)/2.0, 0, CGRectGetWidth(cell.bounds)/2.0);
}

本文个人博客地址: http://wty.im/2016/03/21/delete-tableview-separator-for-a-single-cell/ Github: https://github.com/wty21cn/

转载于:https://my.oschina.net/wty21cn/blog/751943

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值