UITableView定义分割线

  要自定义tableview的分割线,需要手写代码往UItableviewCell 的contentView中添加视图,控制好添加视图的高度和宽度就可以实现。

  效果图:

  

  第一步:设置cell,设置的方式有xib,tableview动态原型方式,还有就是手写代码方式,在这使用动态原型,参考cell的创建方式随笔.

  自定义cell类:

@interface HJTableViewCell : UITableViewCell

@property (nonatomic,strong) HJContact *contact;

+ (instancetype)tableViewCell:(UITableView *)tableView;

@end
@interface HJTableViewCell()
// 表格分割线视图
@property (nonatomic,weak) UIView *separatorView;

@end

@implementation HJTableViewCell

+ (instancetype)tableViewCell:(UITableView *)tableView{
#warning 先从换成池中取,如果缓存池中没有可循环利用的cell,先去storyboard中找合适的cell ,cell是从storyboard中创建出来的,而不是手写代码方式alloc出来的
    // 此标识要和storyboard 本控制器中的动态cell设置的identify标识一致
    static NSString *ID = @"contactCell";
    return [tableView dequeueReusableCellWithIdentifier:ID];
}

/**
 *  如果cell是通过storyboard或者xib创建的,就不可能会调用这个方法来初始化cell
 *  如果cell是通过手写代码创建,才会调用这个方法来初始化cell
 */
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
    if (self == [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
        
    }
    return self;
}

/**
 *  如果cell是通过storyboard或者xib创建的,就会调用这个方法来初始化cell
 *  这个方法的作用类似于init方法
 */
- (void)awakeFromNib {
    NSLog(@"%s",__func__);
    // Initialization code
    // 自定义表格分割线
    UIView *separatorView = [[UIView alloc] init];
#warning 添加至cell的内容视图中
    [self.contentView addSubview:separatorView];
    
    self.separatorView = separatorView;
    
    separatorView.alpha = 0.5;
    separatorView.backgroundColor = [UIColor redColor];
    
}

/**
 *  在这个方法中设置子控件的frame
 *  在此方法中进行设置frame 因为在此方法中获取到得self.frame才是最准确的,因为tableView可能
 *  设置了行高等等 etc...
 *
 */
- (void)layoutSubviews{
    NSLog(@"%s",__func__);
#warning 一定得调用父类的方法
    [super layoutSubviews];
    CGFloat x = 10;
    CGFloat y = self.frame.size.height - 1;
    CGFloat w = self.frame.size.width-20;
    CGFloat h = 1;
    self.separatorView.frame = CGRectMake(x, y, w, h);
}

- (void)setContact:(HJContact *)contact{
    self.textLabel.text = contact.name;
#warning 详情默认会显示不了,需要去storyboard动态单元格中设置 style为right Detail
    self.detailTextLabel.text = contact.tel;
}

  修改tableview默认分割线为none

// 此方法是在本控制器loadView方法初始化view完毕后系统调用此方法
- (void)viewDidLoad {
    [super viewDidLoad];
   
    
    // 设置表格分割线样式
    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
}

#warning 添加至cell的内容视图中

[self.contentView addSubview:separatorView];不然事情就白做了

  cell创建使用:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
    HJTableViewCell *cell = [HJTableViewCell tableViewCell:tableView];
    cell.contact = self.contactList[indexPath.row];
    return cell;
}

   

  完成以上步骤后自定义cell分割线完毕.

  

原文地址:https://www.cnblogs.com/HJiang/p/4197189.html