iphone - rounded - Añadiendo sombra al UITableView
set view shadow swift (3)
Tengo un UITableView (no agrupado) que quiero agregar un dropshadow a la izquierda y a la derecha.
¿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
¿No es el resplandor blanco que estoy viendo la sombra? No tiene un conjunto de compensación, por lo que está haciendo exactamente lo que quiere. Para una sombra, establezca el color en negro y dale un desplazamiento de tal vez 3,5 o algo.
Me gustaría compartir mi solución: esto requiere que usted subclase UITableView y agregue una propiedad, por el bien de la demostración, llamémosla showShadow. Agregue esto al archivo .h de su vista de tabla:
@property (nonatomic,assign) BOOL showShadow;
y su correspondiente @synthesize en el archivo .m para crear métodos de obtención y establecimiento:
@synthesize showShadow;
Luego agrega un iVar UIView *shadowView;
al archivo .h de la vista de tabla. Ahora, en el método de - (id)initWithFrame:(CGRect)frame
de su UITableView subclasificado, agregue el siguiente fragmento de código para configurar la vista que eventualmente proyectará 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 de establecimiento 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 tabla (por cualquier motivo), debe anular el método -setFrame:
para mover también el shadowView junto con él (ya que no está en la jerarquía de vistas de la tabla):
-(void)setFrame:(CGRect)frame{
[super setFrame:frame];
shadowView.frame = frame;
}
¡Has habilitado exitosamente las sombras! Úsalo así:
MySubclassedTableView *table = [[MySubclassedTableView alloc]initWithFrame:CGRectMake(20, 200, 280, 200)];
[self.view addSubview:table];
table.showShadow = YES;
ADVERTENCIA:
Debe establecer la propiedad showShadow DESPUÉS de agregar la vista de tabla, porque la línea table.showShadow llamará a la línea [self.superview insertSubview: shadowView belowSubview: self]; lo que requiere que la vista de tabla sea existente.
clipsToBounds
asegurarse de que clipsToBounds
y masksToBounds
estén configurados en NO
en la vista y capa respectivamente.
self.tableView.clipsToBounds = NO;
self.tableView.layer.masksToBounds = NO;