天天看点

自定义cell分割线

从iOS7开始tableView的系统自带的cell 分割线是不会占满整个宽度的 总是向右空出15个宽度,最近在写项目,遇到这个问题,特此在这里给出解决办法

1.UITableView中将分割线样式改为None

2.自定义UITableViewCell中复写- (void)drawRect: (CGRect)rect方法

- (void)drawRect:(CGRect)rect
{
     CGContextRef context = UIGraphicsGetCurrentContext();
     CGContextSetFillColorWithColor(context, [UIColor clearColor].CGColor);
     CGContextFillRect(context, rect);
//上分割线,
    CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);
    CGContextStrokeRect(context, CGRectMake(, , rect.size.width, ));

//下分割线
    CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);
   CGContextStrokeRect(context, CGRectMake(, rect.size.height, rect.size.width, ));
}
           

这样就解决了cell分割线问题了

最近发现了一个更好的解决办法不需要重新自定义之前的那种方法对iOS7和8的适应不是很好,会出现问题。

最新的解决办法如下

在viewDidLoad中加上

if ([self.tableView respondsToSelector:@selector(setSeparatorInset:)]) {

[self.tableView setSeparatorInset:UIEdgeInsetsZero];

}

if ([self.tableView     respondsToSelector:@selector(setLayoutMargins:)]) {

[self.tableView setLayoutMargins:UIEdgeInsetsZero];

}
           

然后再代理方法willDisplayCell中加上

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
if ([cell    respondsToSelector:@selector(setSeparatorInset:)]) {
[cell setSeparatorInset:UIEdgeInsetsZero];
}
if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
[cell setLayoutMargins:UIEdgeInsetsZero];
}
}
           

OK了