在UITableViewCell中动态制作圆角,同时支持编辑模式

时间:2015-03-11 05:14:53

标签: ios uitableview calayer rounded-corners uibezierpath

我有一个表,有一个部分(这是默认行为)。它默认有5行,可以有行< 5 行> 5 行基于用户与应用的一些互动。

我想让第一个和最后一个单元格分别从左上/右上和左下/右舍入。

我可以通过UIBezierPathCAShapeLayer来完成。但问题是当行数增加/减少时。我不确定如何重置以前舍入的单元格并更新具有特定情况的新单元格?

当我将表格置于编辑模式时会出现另一个问题,当一个删除按钮可见时,它将不会显示第一个和最后一个单元格。它在那里,但不可见。

以下是该应用的截图。

  1. 蓝色边框是表格视图。
  2. enter image description here

    1. 没有边框的表格如下所示,请注意第一行和最后一行的圆角。
    2. enter image description here

      1. 如果我想删除第一个和最后一个单元格,那么它将看起来像下面的图像,
      2. enter image description here enter image description here

        1. 对于其他单元格,它看起来像这样,
        2. enter image description here

          任何人都可以告诉我,我在这里做错了吗?

          这是我的代码:


          - (void) roundCornersAtTopInView:(UIView *)view withRadius:(float)radius withSize:(CGSize)size {
              UIRectCorner corner = (UIRectCornerTopLeft | UIRectCornerTopRight);
              UIView *roundedView = view;
              CGRect actualRect = CGRectMake(roundedView.frame.origin.x, roundedView.frame.origin.y, size.width, size.height);
              UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:actualRect byRoundingCorners:corner cornerRadii:CGSizeMake(radius, radius)];
              CAShapeLayer *maskLayer = [CAShapeLayer layer];
              maskLayer.frame = actualRect;
              maskLayer.path = maskPath.CGPath;
              roundedView.layer.mask = maskLayer;
              roundedView.layer.masksToBounds = YES;
          }
          
          - (void) roundCornersAtBottomInView:(UIView *)view withRadius:(float)radius withSize:(CGSize)size {
              UIRectCorner corner = (UIRectCornerBottomLeft | UIRectCornerBottomRight);
              UIView *roundedView = view;
              CGRect actualRect = CGRectMake(roundedView.frame.origin.x, roundedView.frame.origin.y, size.width, size.height);
              UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:actualRect byRoundingCorners:corner cornerRadii:CGSizeMake(radius, radius)];
              CAShapeLayer *maskLayer = [CAShapeLayer layer];
              maskLayer.frame = actualRect;
              maskLayer.path = maskPath.CGPath;
              roundedView.layer.mask = maskLayer;
              roundedView.layer.masksToBounds = YES;
          }
          

1 个答案:

答案 0 :(得分:0)

使用Grouped TableView 这将帮助您实现目标。

Workaround for rounded corners of grouped UITableView, iOS7