现在的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执行一样的方法就可以实现。如图深圳新东方科技公司就是分区头
第一次在简书上分享,写的不好,还望见谅。
网友评论