从自定义uitableviewcell中删除自定义子图层

时间:2014-07-03 19:54:43

标签: ios objective-c uitableview

我需要圆形,可变高度的tableview单元格。

我使用以下代码创建圆角背景:

- (void)roundView:(UIView *)view withRadius:(float)radius andColour:(UIColor *)colour
{
    view.backgroundColor = [UIColor whiteColor];
    CAShapeLayer *layer = [[CAShapeLayer alloc] init];
    CGMutablePathRef pathRef = CGPathCreateMutable();
    CGRect bounds = CGRectInset(view.bounds, 0.0f, 0.0f);
    CGPathAddRoundedRect(pathRef, nil, bounds, radius, radius);
    layer.path = pathRef;
    CFRelease(pathRef);
    layer.fillColor = colour.CGColor;
    [view.layer insertSublayer:layer atIndex:0];
}  

问题是如果一个高大的单元格是圆形的,当它被重复使用时,较早的子层仍然存在,虽然新的(较小的)高度是正确的,但外观是该框的底部边缘不是圆形的。据推测,(较大的)预先存在的图层正在剪裁。

一个明显的想法是删除子层,但我不能这样做。我尝试创建一个新的单元格而不重复使用,但这似乎不可能。

2 个答案:

答案 0 :(得分:1)

在单元格类中创建自定义图层属性,为其指定图层并在单元格-removeFromSuperLayer中为其调用-prepareForReuse

答案 1 :(得分:0)

我回忆起某个地方,我之前已经按下了按钮...

self.buttonCancel.layer.cornerRadius = 10;
self.buttonCancel.clipsToBounds = YES;

它也在这里工作......

cell.textBlurb.layer.cornerRadius = 10;
cell.textBlurb.clipsToBounds = YES;