滚动后UITableViewCell阴影消失

时间:2015-06-25 10:54:09

标签: ios objective-c uitableview shadow

我已经将UITableViewCell类子类化,以在我的单元格下面添加阴影。当TableView出现在屏幕上时,阴影会正确添加。但是,当我向下滚动tableview,并且阴影的单元格隐藏在屏幕上方时,阴影消失。

- (void)layoutSubviews {
    [super layoutSubviews];
    if (self.shouldAddShadow) {
        self.layer.shadowOpacity = 0.5;
        self.layer.shadowRadius = 1.5;
        self.layer.shadowOffset = CGSizeMake(0, 3);
        self.layer.shadowColor = [[[UIColor appDarkDividerColor] colorWithAlphaComponent:0.9] CGColor];
        [self setClipsToBounds:NO];
        [self.layer setMasksToBounds:NO];
        CGRect shadowFrame = self.layer.bounds;
        CGPathRef shadowPath = [UIBezierPath bezierPathWithRect:shadowFrame].CGPath;
        self.layer.shadowPath = shadowPath;
    }
}

忘了提,我有静态细胞的tableview;所以不会调用prepareForReuse。我有我的单元格的插座,所以我也尝试在scrollViewDidScroll:方法中将阴影设置到我的单元格。即便如此,这对我没有帮助

1 个答案:

答案 0 :(得分:18)

我刚遇到这个问题。最后,我找到了使其发挥作用的方法。

它没有消失(删除),它只是被隐藏了。

我们使用了单元格 zPosition 的属性。

  

来自Apple docs

     

此属性的默认值为0.更改此属性的值会更改屏幕上图层的前后排序。这会影响框架矩形重叠的图层的可见性。

     

此属性的值以磅为单位测量。

默认值为0。这导致顶部细胞隐藏底部细胞(比如阴影)。这意味着如果为视图设置阴影以使其在两侧显示并且两个单元格之前的边距为零,则仅显示顶部单元格的底部阴影,底部阴影的顶部阴影将被隐藏。

当单元格离开屏幕然后返回时,尽管每个单元格的zPosition仍为0,但对于这些单元格,底部单元格现在隐藏顶部单元格。隐藏方向与滚动方向相反。这正是你遇到的情况。

<强>因此,

cell.layer.zPosition = <#value you want#>

例如,我想显示兄弟姐妹的影子,我可以将此单元格的zPosition图层设置为-1,然后会出现两边的阴影。

图层的

zPosition决定哪个单元格可以显示在前面,哪个单元格显示在后面。就像CSS中的z-index一样。

因此解决方案是更改zPosition属性以使其按预期工作。


此外,您不应将单元格clipsToBounds设置为YES。 (默认值为NO)