美文网首页
UITableViewCell分隔线补全方法

UITableViewCell分隔线补全方法

作者: 可可西李 | 来源:发表于2016-04-11 11:37 被阅读506次
    在使用tableView的时候发现, cell分割线右边有一点缺失.总结三个补全方法,使cell的分割线补全:
    1 添加一个自动以view

    实现步骤:

    • 取消系统的分隔线
    • 自定义cell, 在layOutsubviews添加自定义分隔线
    #import "ViewController.h"
    #import "JNCell.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    
        // 取消系统的分隔线
        self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    }
    
    #pargma mark --自定义cell
    #import "JNCell.h"
    @implementation JNell
    
    - (void)layoutSubviews {
    
        [super layoutSubviews];
    
        // 初始化数据
        CGFloat w = self.frame.size.width;
        CGFloat h = 1;
        CGFloat x = 0;
        CGFloat y = self.frame.size.height - 1;
        // 添加自定义分隔线
        UIView *sepLine = [[UIView alloc] init];
    
        sepLine.frame = CGRectMake(x, y, w, h);
    
        // 设置背景色
        sepLine.backgroundColor = [UIColor colorWithRed:150/255.0 green:150/255.0  blue:150/255.0  alpha:1];
    
        [self.contentView addSubview:sepLine];
    }
    @end
    
    2 在TableView中所在的方法中添加相应的方法

    注意 :
    该方法在iOS7.0系统及以下会报错;因为layoutMargins属性是8.0才有的

    - (void)viewDidLayoutSubviews {
    
        if ([self.tableView respondsToSelector:@selector(setLayoutMargins:)]) {
    
            self.tableView.layoutMargins = UIEdgeInsetsZero;
        }
        if ([self.tableView respondsToSelector:@selector(setSeparatorInset:)]) {
    
            self.tableView.separatorInset = UIEdgeInsetsZero;
        }
    }
    
    - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    
        if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
    
            cell.layoutMargins = UIEdgeInsetsZero;
        }
    
        if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {
            cell.separatorInset = UIEdgeInsetsZero;
        }
    }
    
    3 通过背景颜色偷梁换柱

    实现方法:

    • 取消系统的分隔线
    • 设置tableView的背景颜色
    • 自定义cell, 重写系统的setFrame:方法
    #import "ViewController.h"
    #import "JNCell.h"
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    
        // 1.0 取消系统的分隔线
        self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    
        // 2.0 设置背景颜色
        self.tableView.backgroundColor = [UIColor grayColor];
    }
    
    #pargram mark -- 自定义cell
    #import "JNCell.h"
    @implementation ABCell
    
    // 重写系统方法
    - (void)setFrame:(CGRect)frame {
        // 设置分隔线的高度
        frame.size.height -= 1;
        // 调用系统的方法
        [super setFrame:frame];
    }
    
    /**
    当系统自动计算好cell的尺寸后, 会调用该方法给cell设置frame
    
    这时候重写setframe方法, 把cell的高度减1; 故显示后会露出高度为1(tableView的)背景颜色 (充当分隔线)
    */
    

    相关文章

      网友评论

          本文标题:UITableViewCell分隔线补全方法

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