22

I'm trying to add a shadow to a UITableViewCell using the layer.shadowColor, Offset, Radius but it doesn't seem to affect it in any way. The table is grouped style. Any ideas why?

Here is the code i'm using:

cell.layer.shadowColor= [UIColor blackColor].CGColor;
cell.layer.shadowRadius = 5.0;
cell.layer.shadowOffset = CGSizeMake(10, 10);
4

3 回答 3

62

您还需要设置阴影不透明度,它默认为 0,如果您没有明确设置它,您将看不到任何东西。

CALayer 参考

cell.layer.shadowOffset = CGSizeMake(1, 0);
cell.layer.shadowColor = [[UIColor blackColor] CGColor];
cell.layer.shadowRadius = 5;
cell.layer.shadowOpacity = .25;

另请注意,如果您不设置阴影路径,您将在 iPhone/iPad 上获得糟糕的性能。使用类似下面的代码来设置阴影路径,它消除了对 tableviewcell 下方的图层进行模糊以创建“高质量”阴影的需要。

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

观看视频 425(也称为 424 和 426)以了解更多关于 WWDC 2010 视频的阴影的信息:WWDC 2010 会议视频

于 2011-02-14T22:54:27.003 回答
19

只需在 Swift 中添加@Paul Soult 答案:

cell?.layer.shadowOffset = CGSizeMake(0, 1)
cell?.layer.shadowColor = UIColor.blackColor().CGColor
cell?.layer.shadowRadius = 1
cell?.layer.shadowOpacity = 0.6

// Maybe just me, but I had to add it to work:
cell?.clipsToBounds = false

let shadowFrame: CGRect = (cell?.layer.bounds)!
let shadowPath: CGPathRef = UIBezierPath(rect: shadowFrame).CGPath
cell?.layer.shadowPath = shadowPath
于 2015-09-28T20:42:51.563 回答
2

分组表视图单元格的视图层次结构非常不透明。cell.layer 实际上是指单元格主视图的层,它占据了表格的整个宽度。插入单元格的圆形部分实际上由苹果用于绘制分组单元格的私有方法处理。

您可能会更幸运地创建 UITableViewCell 的自定义子类。

于 2010-08-23T21:00:30.747 回答