某些单元格的UITableViewCell投影不绘制

时间:2013-04-25 01:12:33

标签: cocoa-touch uitableview core-animation

我有一个自定义的tableview单元子类,它绘制了一个投影... Views First Load

当我向下滚动时,一些单元格没有绘制阴影......

enter image description here

当我向上滚动时也会发生这种情况。

我尝试将绘图代码移动到单元格子类drawRect,setNeedsLayout。我也在tableviewController的配置单元格方法中试过这个。

self.layer.shadowRadius = 4.1f;
self.layer.shadowOpacity = 0.5;
self.layer.shadowOffset = CGSizeMake(2.1f,7.4f);

CGFloat curlFactor = 15.00f;
CGFloat shadowDepth = 4.6f;
CGSize size = self.layer.bounds.size;

UIBezierPath* path = [UIBezierPath bezierPath];

[path moveToPoint:CGPointMake(0.0f, 0.0f)];
[path addLineToPoint:CGPointMake(size.width, 0.0f)];
[path addLineToPoint:CGPointMake(size.width, size.height + shadowDepth)];

[path addCurveToPoint:CGPointMake(0.0f, size.height + shadowDepth)
        controlPoint1:CGPointMake(size.width - curlFactor, size.height + shadowDepth - curlFactor)
        controlPoint2:CGPointMake(curlFactor, size.height + shadowDepth - curlFactor)];
[self.layer setShadowPath:[path CGPath]];

提前致谢。

1 个答案:

答案 0 :(得分:0)

看起来你正在从每个UITableViewCell视图的边界绘制阴影,当UITableView重用单元格并显示它们时,它可能无法使所有单元格子视图完全叠加在一起,你需要自己确保它们。

在UITableView委托中

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    static int index = -1;
    if (indexPath.row > index) {
        [tableView sendSubviewToBack:cell];
    }
    else {
        [tableView bringSubviewToFront:cell];
    }
    index = indexPath.row;
}

或者你可以施加内阴影并避免在界外画画。