Pregunta Agregar sombra paralela a UITableView


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

enter image description here

¿Cómo puedo conseguir esto? 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.


16
2018-01-25 23:40


origen


Respuestas:


Debes asegurarte clipsToBounds y masksToBounds están configurados para NO en la vista y la capa, respectivamente.

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

43
2018-01-26 00:06



Me gustaría compartir mi solución: Esto requiere que subclass UITableView y agregar una propiedad, por el bien de la demostración, vamos a llamarlo showShadow. Agregue esto al archivo .h de su vista de tabla:

@property (nonatomic,assign) BOOL showShadow; 

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

@synthesize showShadow;

Luego agrega un iVar UIView *shadowView; al archivo .h de la vista de tabla. Ahora en el - (id)initWithFrame:(CGRect)frame Método de su UITableView subclasificado agregue la siguiente pieza de código para configurar la vista que eventualmente arrojará 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, escriba el método setter 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 desea mover la mesa (por el motivo que sea), debe anular la -setFrame: método para mover también el shadowView junto con él (ya que no está en la jerarquía de vista de la vista de tabla):

-(void)setFrame:(CGRect)frame{

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

}

¡Has habilitado las sombras con éxito! Úselo así:

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

ADVERTENCIA:

Tienes que establecer la propiedad showShadow DESPUÉS usted agrega su vista de tabla, porque la línea table.showShadow llamará a la línea [self.superview insertSubview: shadowView belowSubview: self]; que requiere que la vista de tabla sea existente.


4
2018-03-30 14:00



¿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
2018-01-25 23:58