更新一下: IOS14系统 cell不能直接设置圆角,只能设置cell.contentView的圆角!!!
通常用下面的代码为cell设置圆角,但是可能依然没有效果
cell.layer.cornerRadius = 6;
cell.layer.masksToBounds = YES;
换为下面这种方式生效。
cell.layer.cornerRadius = 6;
cell.clipsToBounds = YES;
如果上面的方式依然不生效,可能是你打开了cell左滑操作的功能。
在cell.m文件的中写如下代码
- (void)layoutSubviews {
[super layoutSubviews];
self.layer.cornerRadius = k6sWidth(6);
self.clipsToBounds = YES;
}
效果如下图:
图片.png
我们发现右边的删除按钮是没有圆角的。
通过层级图我们发现,左滑cell显示删除按钮时,iOS13以上和以下的系统视图是不一样的,IOS13以下系统,cell右边出现一个和它平级的视图UISwipeActionPullView ,而IOS13以上系统cell出现了一个父视图_UITableViewCellSwipeContainerView,它的子视图有UISwipeActionPullView。
iOS13以下层级图:
图片.png 图片.pngiOS13以上层级图:
图片.png 图片.png
如果想要右边的删除按钮右边也有圆角效果 我们只要找到这个父视图,设置它的圆角就可以了。
代码如下:
- (void)layoutSubviews {
[super layoutSubviews];
self.layer.cornerRadius = 6;
self.clipsToBounds = YES;
[self dealDeleteButton];
}
- (void)dealDeleteButton {
UIView *superView = self.superview;
if ([superView isKindOfClass:NSClassFromString(@"_UITableViewCellSwipeContainerView")]) {
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:superView.bounds byRoundingCorners:UIRectCornerTopRight | UIRectCornerBottomRight cornerRadii:CGSizeMake(6, 6)];
CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
maskLayer.frame = superView.bounds;
maskLayer.path = maskPath.CGPath;
superView.layer.mask = maskLayer;
}
}
效果如下:
图片.png
网友评论