Ответ 1
Вам нужно убедиться, что clipsToBounds
и masksToBounds
установлены на NO
на вид и слой соответственно.
self.tableView.clipsToBounds = NO;
self.tableView.layer.masksToBounds = NO;
У меня есть простой UITableView (не сгруппированный), который я хочу добавить dropshadow влево и вправо.
Как я могу это достичь? Я пробовал:
[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];
но это не сработает.
Вам нужно убедиться, что clipsToBounds
и masksToBounds
установлены на NO
на вид и слой соответственно.
self.tableView.clipsToBounds = NO;
self.tableView.layer.masksToBounds = NO;
Я хотел бы поделиться своим решением: Это требует от вас подкласса UITableView и добавления свойства, для демонстрации позвоните ему showShadow. Добавьте это в свой файл таблицы .h:
@property (nonatomic,assign) BOOL showShadow;
и его соответствующий @synthesize в файле .m для создания методов getter и setter:
@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;
}
И, наконец, напишите метод setter, чтобы показать/скрыть тень:
-(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 belowSubview: self]; который требует, чтобы представление таблицы существовало.
Разве не белое сияние, которое я вижу в тени? У вас нет набора смещений, поэтому он делает именно то, что вы хотите. Для тени установите цвет в черный цвет и дайте ему смещение, возможно, 3,5 или что-то еще.