关于给tableView cell加圆角 或者组头加圆角

2019-03-28  本文已影响0人  pentakill

现在的UI设计越来越个性化,原始的tableView样式在他们眼里觉得不好看,得加上圆角和分区如图

@“望穿秋水”单行cell加圆角,如果在cell编写的时候就加了圆角还好,可是如果是之前是直角形状,要改成圆角那就麻烦很多了,所以重点来了:

只需要重写tableview的代理方法

- (void)tableView:(UITableView*)tableView willDisplayCell:(UITableViewCell*)cell forRowAtIndexPath:(NSIndexPath*)indexPath{

    if([cellrespondsToSelector:@selector(tintColor)]) {

        CGFloatcornerRadius =10.f;

       cell.backgroundColor = UIColor.clearColor;

        CAShapeLayer *layer = [[CAShapeLayer alloc] init];

       CGMutablePathRef pathRef = CGPathCreateMutable();

        CGRectbounds =CGRectInset(cell.bounds,0,0);

        if(indexPath.row==0&& indexPath.row== [tableViewnumberOfRowsInSection:indexPath.section]-1) {

//如果既是第一行也是最后一行,加全部圆角

            CGPathAddRoundedRect(pathRef,nil, bounds, cornerRadius, cornerRadius);

        }elseif(indexPath.row==0) {

//第一行只画左上和右上的圆角

            CGPathMoveToPoint(pathRef,nil,CGRectGetMinX(bounds),CGRectGetMaxY(bounds));

           CGPathAddArcToPoint(pathRef,nil,CGRectGetMinX(bounds),CGRectGetMinY(bounds),CGRectGetMidX(bounds),CGRectGetMinY(bounds), cornerRadius);

    CGPathAddArcToPoint(pathRef,nil,CGRectGetMaxX(bounds),CGRectGetMinY(bounds),CGRectGetMaxX(bounds),CGRectGetMidY(bounds), cornerRadius);

            CGPathAddLineToPoint(pathRef, nil, CGRectGetMaxX(bounds), CGRectGetMaxY(bounds));

        }elseif(indexPath.row== [tableViewnumberOfRowsInSection:indexPath.section]-1) {

//最后一行只画左上和右上的圆角

            CGPathMoveToPoint(pathRef,nil,CGRectGetMinX(bounds),CGRectGetMinY(bounds));

         CGPathAddArcToPoint(pathRef,nil,CGRectGetMinX(bounds),CGRectGetMaxY(bounds),CGRectGetMidX(bounds),CGRectGetMaxY(bounds), cornerRadius);

            CGPathAddArcToPoint(pathRef,nil,CGRectGetMaxX(bounds),CGRectGetMaxY(bounds),CGRectGetMaxX(bounds),CGRectGetMidY(bounds), cornerRadius);

            CGPathAddLineToPoint(pathRef, nil, CGRectGetMaxX(bounds), CGRectGetMinY(bounds));

        }else{

            CGPathAddRect(pathRef,nil, bounds);

        }

        layer.path= pathRef;

        CFRelease(pathRef);

        //颜色修改

        layer.fillColor=WhiteColor.CGColor;

        layer.strokeColor=WhiteColor.CGColor;

        UIView*testView = [[UIViewalloc]initWithFrame:bounds];

        [testView.layerinsertSublayer:layeratIndex:0];

        testView.backgroundColor = UIColor.clearColor;

        cell.backgroundView= testView;

    }

}

即可。

但是如果是还有组头呢,这个怎么办呢,不要着急,在tableView的代理方法里面一样有这个分区头的方法

- (void)tableView:(UITableView*)tableView willDisplayHeaderView:(nonnullUIView*)view forSection:(NSInteger)section{

}

以此类推和cell执行一样的方法就可以实现。如图深圳新东方科技公司就是分区头

第一次在简书上分享,写的不好,还望见谅。

上一篇下一篇

猜你喜欢

热点阅读