2010-08-23 100 views
21

我试图使用layer.shadowColor,Offset,Radius将影子添加到UITableViewCell,但它似乎没有以任何方式影响它。表格是分组的样式。任何想法为什么?iPhone UITableViewCell图层阴影

这里是我使用的代码:

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

回答

2

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

您可能会有更多的运气创建UITableViewCell的自定义子类。

60

您还需要设置阴影不透明度,它默认为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

+0

这个对我来说非常合适,而不像许多其他解决方案所暗示的那样增加一个额外的单元。同样,如果你的单元格被重用,你需要取消它,因为我只希望这是表格中的最后一个单元格。 – Openside 2011-11-02 11:47:52

+1

性能秘诀是一个巨大的帮助 - 没有阴影路径表格单元格时,他们幻灯片真的波涛汹涌。设置shadowPath有点不明显,并没有真正出现在我能找到的任何文档中。 – 2012-05-23 17:17:54

+0

如果我在tableView中放置阴影,而不是在单元格中滚动tableview的边界时发生变化。如何更新shadowPath以匹配? – 2012-05-24 15:47:31

12

只需添加@保罗苏尔特答案斯威夫特:

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 
+4

谢谢。 'cell.clipsToBounds = YES'是诀窍。 – 2015-11-26 20:16:28