我已经将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:方法中将阴影设置到我的单元格。即便如此,这对我没有帮助
答案 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)