with uitableviewcell tutorial tableviewcontroller multiple example custom iphone cocoa-touch uitableview shadow

iphone - uitableviewcell - uitableview with multiple custom cells swift



iPhone UITableViewCell capa sombra (3)

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é?

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);


La jerarquía de vista de una celda de vista de tabla agrupada es 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.


Simplemente agregando la respuesta @Paul 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


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

Referencia CALayer

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 establece la ruta de sombra tendrá un rendimiento terrible 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;

Vea el video 425 (también 424 y 426) para aprender más sobre las sombras de la WWDC 2010 Videos disponibles aquí: Videos de la sesión de la WWDC 2010