UITableViewCell中的阴影在向上滚动时从下到上移动

时间:2014-04-08 23:02:06

标签: ios objective-c uitableview scroll shadow

我有一个带有自定义单元格的UITableView,我想要底部阴影/阴影。为此,我使用此代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *cellIdentifier = @"cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"myTableViewCell" forIndexPath:indexPath];

    cell.layer.shouldRasterize = YES;
    cell.layer.rasterizationScale = [UIScreen mainScreen].scale;
    cell.layer.shadowColor = [[UIColor blackColor] CGColor];
    cell.layer.shadowOffset = CGSizeMake(0.0f, 0.0f);
    cell.layer.shadowRadius = 1.0f;
    cell.layer.shadowOpacity = 1.0f;

    CGPathRef shadowPath = [UIBezierPath bezierPathWithRect:cell.bounds].CGPath;
    cell.layer.shadowPath = shadowPath;

    return cell;
}

当桌面视图向下滚动或根本没有滚动时,阴影看起来像预期的那样: http://oi62.tinypic.com/ev1gn4.jpg

但是,无论何时向上滚动,阴影都会从单元格的底部移动到顶部: http://oi60.tinypic.com/2r4kdjl.jpg

我怀疑它与每次滚动tableview时呈现的阴影有关,但我不知道如何解决它。

我哪里错了?

提前多多感谢。

2 个答案:

答案 0 :(得分:4)

首先,我建议不要在每个细胞中填充细胞层。也就是说,如果你有多个单元格的屏幕,它会使TableView滚动非常不平滑。 我做了同样的事情,但在添加到单元格的ImageView中,它很糟糕。我的解决方案是创建一个包含阴影的UIImage / UIView,并将其作为子视图添加,阴影效果不是很好,但是这样做很容易:

- (UIView*)shadowWithRect:(CGRect)rect {
    UIView* v = [[UIView alloc] initWithFrame:rect];
    CAGradientLayer *gradient = [CAGradientLayer layer];
    gradient.frame = v.bounds;
    gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor blackColor] CGColor], (id)[[UIColor clearColor] CGColor], nil];
    [v.layer insertSublayer:gradient atIndex:0];
    return v;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *cellIdentifier = @"shadowCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
    [cell addSubview:[self shadowWithRect:cell.bounds]];
    return cell;
}

也许可以在一个属性或其他东西中“保存”该视图,以避免每次都重新创建。 另外,不要忘记删除/不添加多个“阴影”,否则它看起来很奇怪。

答案 1 :(得分:2)

您已将阴影设置为围绕整个单元格。根据绘制单元格的顺序,您将看到顶部阴影或底部阴影。设置阴影,使其仅显示在单元格的底部而不是顶部。使用shadowOffset进行游戏以将阴影向下移动,使其不会出现在单元格的顶部。您可能还需要更改shadowRadius