2010-08-23 9 views
21

Estoy tratando de agregar una sombra a una UITableViewCell usando layer.shadowColor, Offset, Radius pero no parece afectarlo de ninguna manera. La tabla está agrupada estilo. ¿Alguna idea de por qué?iPhone UITableViewCell layer shadow

Aquí está el código que estoy usando:

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

Respuesta

2

La vista de jerarquía de una célula vista de tabla agrupada es realmente bastante opaca. cell.layer se está refiriendo a la capa de la vista principal de la celda, que ocupa todo el ancho de la tabla. La parte redondeada de la celda que está insertada en realidad es manejada por los métodos privados de Apple para dibujar celdas agrupadas.

Probablemente tengas más suerte creando una subclase personalizada de UITableViewCell.

60

También debe establecer la opacidad de la sombra, por defecto es 0 y no verá nada si no lo establece explícitamente.

CALayer Reference

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

También tenga en cuenta, que si no se establece la ruta de sombra que tendrá terribles rendimiento en el iPhone/IPAD. Use algo como el siguiente código para establecer una ruta de sombra, elimina la necesidad de difuminar las capas debajo de su tableviewcell para crear una sombra de "alta calidad".

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

Ver video 425 (también 424 y 426) para aprender más acerca de las sombras de la WWDC 2010 Vídeos disponibles aquí: WWDC 2010 Session Videos

+0

Éste funcionó perfectamente para mí, en lugar de agregar una celda extra, como sugieren muchas otras soluciones. También, aunque debes desarmarlo si tus células son reutilizadas, ya que solo quería esto para la última celda de una tabla. – Openside

+1

La sugerencia de rendimiento fue de gran ayuda, sin que las celdas de la tabla shadowPath estén realmente agitadas cuando se deslizan. Establecer shadowPath es un poco no obvio y realmente no aparece en ningún documento que pueda encontrar. –

+0

si pongo la sombra en tableView, no en la celda, cuando se desplaza el límite de la vista de tabla cambia. ¿Cómo actualizo shadowPath para que coincida? –

12

Simplemente añadiendo la respuesta @ Pablo Soult en Swift:

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

Gracias. 'cell.clipsToBounds = YES' fue el truco. –