Я хотел бы поделиться своим решением:
Это требует, чтобы вы создали подкласс UITableView и добавили свойство, для демонстрации давайте назовем его showShadow. Добавьте это в .h файл вашего табличного представления:
@property (nonatomic,assign) BOOL showShadow;
и соответствующий ему @synthesize в файле .m для создания методов получения и установки:
@synthesize showShadow;
Затем добавьте iVar UIView *shadowView;
в файл .h табличного представления.
Теперь в методе - (id)initWithFrame:(CGRect)frame
вашего подкласса UITableView добавьте следующий фрагмент кода, чтобы настроить представление, которое в конечном итоге будет отбрасывать тень:
- (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;
}
И, наконец, напишите метод установки, чтобы показать / скрыть тень:
-(void)setShowShadow:(BOOL)s{
showShadow = s;
if(s){
[self.superview insertSubview:shadowView belowSubview:self];
}else{
[shadowView removeFromSuperview];
}
}
Кроме того, если вы хотите переместить таблицу (по какой-либо причине), вам следует переопределить метод -setFrame:
, чтобы также перемещать shadowView вместе с ним (так как он отсутствует в иерархии представления табличного представления):
-(void)setFrame:(CGRect)frame{
[super setFrame:frame];
shadowView.frame = frame;
}
Вы успешно включили тени! Используйте это так:
MySubclassedTableView *table = [[MySubclassedTableView alloc]initWithFrame:CGRectMake(20, 200, 280, 200)];
[self.view addSubview:table];
table.showShadow = YES;
ВНИМАНИЕ:
Вы должны установить свойство showShadow ПОСЛЕ вы добавляете свое табличное представление, потому что строка table.showShadow будет вызывать строку [self.superview insertSubview: shadowView underSubview: self]; который требует, чтобы существовало табличное представление.