写到一个需求,一个TableView进行了分区设置, 且每个区都是圆角显示。
那如何对section进行圆角设置呢?
UITableView的代理里有一个方法:- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
在cell即将被创建出来的时候, 我们进行cell边框的重绘:
通过UIBezierPath
的UIRectCorner
指定需要成为圆角的角,画一个CAShapeLayer
,将这个layer添加到cell.layer
上
若某一个section有区头, 则要对该区的第一个cell进行判断:
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
CGFloat cornerRadius =10.0;
CGRect bounds = cell.bounds;
// 每区行数
NSInteger numberOfRows = [tableView numberOfRowsInSection:indexPath.section];
// 区头
UIView *view = [self tableView:tableView viewForHeaderInSection:indexPath.section];
//绘制曲线
UIBezierPath *bezierPath = nil;
if (indexPath.row == 0 && numberOfRows == 1) {
// 一个区只有一行cell
if (view != nil) {
// 有区头:左下,右下为圆角
bezierPath = [UIBezierPath bezierPathWithRoundedRect:bounds byRoundingCorners:(UIRectCornerBottomLeft|UIRectCornerBottomRight) cornerRadii:CGSizeMake(cornerRadius, cornerRadius)];
}else{
//四个角都为圆角
bezierPath = [UIBezierPath bezierPathWithRoundedRect:bounds byRoundingCorners:UIRectCornerAllCorners cornerRadii:CGSizeMake(cornerRadius, cornerRadius)];
}
} else if (indexPath.row == 0) {
// 某个区的第一行
if (view != nil) {
// 有区头:为矩形
bezierPath = [UIBezierPath bezierPathWithRect:bounds];
}else{
//左上、右上角为圆角
bezierPath = [UIBezierPath bezierPathWithRoundedRect:bounds byRoundingCorners:(UIRectCornerTopLeft|UIRectCornerTopRight) cornerRadii:CGSizeMake(cornerRadius, cornerRadius)];
}
} else if (indexPath.row == numberOfRows - 1) {
//某个区的最后一行:左下、右下角为圆角
bezierPath = [UIBezierPath bezierPathWithRoundedRect:bounds byRoundingCorners:(UIRectCornerBottomLeft|UIRectCornerBottomRight) cornerRadii:CGSizeMake(cornerRadius, cornerRadius)];
} else {
//某个区的中间行:为矩形
bezierPath = [UIBezierPath bezierPathWithRect:bounds];
}
cell.backgroundColor = [UIColor clearColor];
//新建一个layer层,设置填充色和边框颜色
CAShapeLayer *layer = [CAShapeLayer layer];
layer.path = bezierPath.CGPath;
layer.fillColor = [UIColor whiteColor].CGColor;
layer.strokeColor = [UIColor whiteColor].CGColor;
//将layer层添加到cell.layer中,并插到最底层
[cell.layer insertSublayer:layer atIndex:0];
}
效果如图:
image.png以上。
如帮你解决了问题,可以点赞支持我哦~
网友评论