iPhone UITableViewCell图层阴影

Zap*_*ila 22 iphone cocoa-touch shadow uitableview

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

这是我正在使用的代码:

cell.layer.shadowColor= [UIColor blackColor].CGColor;
cell.layer.shadowRadius = 5.0;
cell.layer.shadowOffset = CGSizeMake(10, 10);
Run Code Online (Sandbox Code Playgroud)

Pau*_*olt 62

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

CALayer参考

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

另请注意,如果您未设置阴影路径,则iPhone/iPad上的性能会非常糟糕.使用类似下面的代码来设置阴影路径,它不需要模糊tableviewcell下面的图层来创建"高质量"阴影.

CGRect shadowFrame = cell.layer.bounds;
CGPathRef shadowPath = [UIBezierPath bezierPathWithRect:shadowFrame].CGPath;
cell.layer.shadowPath = shadowPath;
Run Code Online (Sandbox Code Playgroud)

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


小智 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
Run Code Online (Sandbox Code Playgroud)

  • 谢谢.`cell.clipsToBounds = YES`就是诀窍. (4认同)

Jer*_*nes 2

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

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