前言
在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/
网友评论