2012-01-25 20 views
16

Tengo un UITableView normal (no agrupado) al que quiero agregar una sombra de gotas a la izquierda y a la derecha.Agregar sombra paralela a UITableView

enter image description here

¿Cómo puedo lograr esto? Lo he intentado:

[self.tableView.layer setShadowColor:[[UIColor whiteColor] CGColor]]; 
[self.tableView.layer setShadowOffset:CGSizeMake(0, 0)]; 
[self.tableView.layer setShadowRadius:5.0]; 
[self.tableView.layer setShadowOpacity:1]; 

pero no funciona.

+4

¿Se ha asegurado de que 'clipToBounds' y' maskToBounds' están establecidos en 'NO' (para la vista y la capa, respectivamente)? – mattjgalloway

+0

Gracias chico, tienes razón! Si agrega una respuesta, la marcaré como respuesta correcta. –

+0

Respondido. Me alegro de que lo resolvió! – mattjgalloway

Respuesta

43

Debe asegurarse de que clipsToBounds y masksToBounds estén configurados en NO en la vista y en la capa, respectivamente.

self.tableView.clipsToBounds = NO; 
self.tableView.layer.masksToBounds = NO; 
+4

Gracias por la información. Pero si configuro tableView.layer.masksToBounds = NO; & tableView.clipsToBounds = NO; , mi tableviewcell se mueve por encima de los límites de las tablas. Tengo tableview, imageview en mi viewController. Entonces, una parte es utilizada por la vista de tabla y alguna parte es utilizada por iamgeview. ¿Puedes ayudarme con eso? – iOSAppDev

+0

@iOSAppDev Por favor, eche un vistazo a mi respuesta. Se evitará el problema que se está ejecutando. –

+2

Es mejor colocar una UIView detrás de UITableView y agregar la sombra a la UIView. – filou

0

¿No es el resplandor blanco que estoy viendo la sombra? No tiene un conjunto de desplazamiento, por lo que está haciendo exactamente lo que quiere. Para una sombra, establece el color en negro y dale una compensación de tal vez 3,5 o algo así.

+0

No, esa imagen es lo que he tratado de lograr. Ahora lo he corregido con el comentario mattjgalloway. Gracias de cualquier manera. –

4

Me gustaría compartir mi solución: Para ello, debe subclase UITableView y añadir una propiedad, por el bien de la demostración vamos a llamarlo showShadow. Agregue esto a su archivo .h de vista de tabla:

@property (nonatomic,assign) BOOL showShadow;

y su correspondiente @synthesize en el archivo .m para crear métodos getter y setter:

@synthesize showShadow;

añadiendo además un Ivar UIView *shadowView; al archivo .h de la vista de tabla. Ahora en el método de - (id)initWithFrame:(CGRect)frame su subclase UITableView añadir el siguiente fragmento de código para configurar el punto de vista que eventualmente emitir la sombra:

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 

     shadowView = [[UIView alloc]initWithFrame:self.frame]; 
     shadowView.backgroundColor = [UIColor whiteColor]; 
     shadowView.layer.shadowOpacity = 0.1; 
     shadowView.layer.shadowOffset = CGSizeMake(3, 3); 
     shadowView.layer.shadowRadius = 1; 



    } 
    return self; 
} 

Y, finalmente, escribir el método de selección para mostrar/ocultar la sombra:

-(void)setShowShadow:(BOOL)s{ 

    showShadow = s; 

    if(s){ 
     [self.superview insertSubview:shadowView belowSubview:self]; 
    }else{ 
     [shadowView removeFromSuperview]; 
    } 
} 

además si le gustaría que mover la mesa (por cualquier razón), se debe reemplazar el método -setFrame: para mover también el shadowView junto con él (ya que no está en la vista de tabla jerarquía de la vista):

-(void)setFrame:(CGRect)frame{ 

    [super setFrame:frame]; 
    shadowView.frame = frame; 

} 

Habilitado correctamente las sombras! Utilizar de esta manera:

MySubclassedTableView *table = [[MySubclassedTableView alloc]initWithFrame:CGRectMake(20, 200, 280, 200)]; 
     [self.view addSubview:table]; 
     table.showShadow = YES; 

ADVERTENCIA:

Hay que establecer la propiedad showShadow DESPUÉS de agregar la vista de tabla, ya que la línea table.showShadow se llame a la línea de [auto .superview insertSubview: shadowView belowSubview: self]; que requiere que la vista de tabla sea existente.

Cuestiones relacionadas