Vorrei condividere la mia soluzione: Questo richiede di sottoclasse UITableView e aggiungere una proprietà, per il bene della manifestazione chiamiamolo showShadow. Aggiungi questo al file .h della tua vista tabella:
@property (nonatomic,assign) BOOL showShadow;
e il suo corrispondente @synthesize nel file .m per creare metodi getter e setter:
@synthesize showShadow;
quindi aggiungere un iVar UIView *shadowView;
al file .h della vista tabella. Ora nel metodo di - (id)initWithFrame:(CGRect)frame
vostra sottoclasse UITableView aggiungere il seguente pezzo di codice per impostare la vista che alla fine gettato l'ombra:
- (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;
}
E, infine, scrivere il metodo setter per mostrare/nascondere l'ombra:
-(void)setShowShadow:(BOOL)s{
showShadow = s;
if(s){
[self.superview insertSubview:shadowView belowSubview:self];
}else{
[shadowView removeFromSuperview];
}
}
inoltre, se vuoi spostare il tavolo (per qualsiasi motivo), è necessario eseguire l'override del metodo -setFrame:
per spostare anche la shadowView con esso (in quanto non è nella gerarchia della vista della vista tabella):
-(void)setFrame:(CGRect)frame{
[super setFrame:frame];
shadowView.frame = frame;
}
Le ombre sono state abilitate correttamente! Utilizzare in questo modo:
MySubclassedTableView *table = [[MySubclassedTableView alloc]initWithFrame:CGRectMake(20, 200, 280, 200)];
[self.view addSubview:table];
table.showShadow = YES;
ATTENZIONE:
È necessario impostare la proprietà showShadow DOPO si aggiunge la visualizzazione tavolo, perché la linea table.showShadow chiamerà la linea [auto .superview insertSubview: shadowView belowSubview: self]; che richiede che la vista tabella sia esistente.
Ti sei assicurato che 'clipToBounds' e' maskToBounds' siano impostati su 'NO' (per la vista e il layer rispettivamente)? – mattjgalloway
Grazie ragazzo, hai ragione! Se aggiungi una risposta, la contrassegnerò come risposta corretta. –
risposto. Sono contento che l'abbia risolto! – mattjgalloway