2010-08-23 101 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