美文网首页iOS DeveloperiOS 开发
删除TableView中单个cell的分割线

删除TableView中单个cell的分割线

作者: wty21cn | 来源:发表于2016-09-22 18:47 被阅读832次

    前言

    在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/

    相关文章

      网友评论

        本文标题:删除TableView中单个cell的分割线

        本文链接:https://www.haomeiwen.com/subject/rowzettx.html