滚动后UITableViewCell阴影消失

ily*_*a29 10 objective-c shadow uitableview ios

我已经将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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

ooo*_*ops 18

我刚遇到这个问题.最后,我找到了让它发挥作用的方法.

它不会消失(删除),它只是被隐藏了.

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

来自Apple文档:

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

此属性的值以磅为单位.

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

当细胞离开屏幕然后返回时,虽然zPosition每个细胞仍然是0,但对于那些细胞,底部细胞现在隐藏顶部细胞.隐藏方向与滚动方向相反.这正是你遇到的情况.

所以,

cell.layer.zPosition = <#value you want#>
Run Code Online (Sandbox Code Playgroud)

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

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

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


此外,您不应将单元格设置clipsToBoundsYES.(默认值为NO)