iPhone UITableViewCell图层阴影

时间:2010-08-23 10:58:34

标签: iphone cocoa-touch uitableview shadow

我正在尝试使用layer.shadowColor,Offset,Radius向UITableViewCell添加阴影,但它似乎不会以任何方式影响它。该表是分组样式。有什么想法吗?

以下是我正在使用的代码:

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

3 个答案:

答案 0 :(得分:61)

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

CALayer Reference

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 Session Videos

答案 1 :(得分:17)

在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

答案 2 :(得分:2)

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

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