iOS UITableView设置section圆角

作者 : 开心源码 本文共2094个字,预计阅读时间需要6分钟 发布时间: 2022-05-13 共197人阅读

分组圆角.gif

这个一直觉得简单又不知道从哪儿下手的功能,今天有空,找了下资料动手做一做
主要利用UITableViewDelegatewillDisplayCell方法结合UIBezierPath绘制显示的圆角

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath;
  // 圆角角度    CGFloat radius = 10.f;    // 设置cell 背景色为透明    cell.backgroundColor = UIColor.clearColor;    // 创立两个layer    CAShapeLayer *normalLayer = [[CAShapeLayer alloc] init];    CAShapeLayer *selectLayer = [[CAShapeLayer alloc] init];    // 获取显示区域大小    CGRect bounds = CGRectInset(cell.bounds, 10, 0);    // 获取每组行数    NSInteger rowNum = [tableView numberOfRowsInSection:indexPath.section];    // 贝塞尔曲线    UIBezierPath *bezierPath = nil;

每组考虑只有一行和有多行的情况,若行数为1,则这个cell的每个角都是圆角,否则第一行的左上右上为圆角,最后一行的左下右下为圆角

    if (rowNum == 1) {        // 一组只有一行(四个角一律为圆角)        bezierPath = [UIBezierPath bezierPathWithRoundedRect:bounds                                           byRoundingCorners:UIRectCornerAllCorners                                                 cornerRadii:CGSizeMake(radius, radius)];    } else {        if (indexPath.row == 0) {            // 每组第一行(增加左上和右上的圆角)            bezierPath = [UIBezierPath bezierPathWithRoundedRect:bounds                                               byRoundingCorners:(UIRectCornerTopLeft|UIRectCornerTopRight)                                                     cornerRadii:CGSizeMake(radius, radius)];                    } else if (indexPath.row == rowNum - 1) {            // 每组最后一行(增加左下和右下的圆角)            bezierPath = [UIBezierPath bezierPathWithRoundedRect:bounds                                               byRoundingCorners:(UIRectCornerBottomLeft|UIRectCornerBottomRight)                                                     cornerRadii:CGSizeMake(radius, radius)];        } else {            // 每组不是首位的行不设置圆角            bezierPath = [UIBezierPath bezierPathWithRect:bounds];        }    }

而后将贝塞尔曲线的路径赋值给图层,并将图层增加到view中

    // 把已经绘制好的贝塞尔曲线路径赋值给图层,而后图层根据path进行图像渲染render    normalLayer.path = bezierPath.CGPath;    selectLayer.path = bezierPath.CGPath;            UIView *nomarBgView = [[UIView alloc] initWithFrame:bounds];    // 设置填充颜色    normalLayer.fillColor = [UIColor colorWithWhite:0.95 alpha:1.0].CGColor;    // 增加图层到nomarBgView中    [nomarBgView.layer insertSublayer:normalLayer atIndex:0];    nomarBgView.backgroundColor = UIColor.clearColor;    cell.backgroundView = nomarBgView;

此时圆角显示就完成了,但是假如没有取消cell的点击效果,还是会出现一个灰色的长方形的形状,再用上面创立的selectLayercell增加一个selectedBackgroundView

    UIView *selectBgView = [[UIView alloc] initWithFrame:bounds];    selectLayer.fillColor = [UIColor colorWithWhite:0.95 alpha:1.0].CGColor;    [selectBgView.layer insertSublayer:selectLayer atIndex:0];    selectBgView.backgroundColor = UIColor.clearColor;    cell.selectedBackgroundView = selectBgView;
说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » iOS UITableView设置section圆角

发表回复