Добавление тени в UITableView - программирование
Подтвердить что ты не робот

Добавление тени в UITableView

У меня есть простой UITableView (не сгруппированный), который я хочу добавить dropshadow влево и вправо.

enter image description here

Как я могу это достичь? Я пробовал:

[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];

но это не сработает.

4b9b3361

Ответ 1

Вам нужно убедиться, что clipsToBounds и masksToBounds установлены на NO на вид и слой соответственно.

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

Ответ 2

Я хотел бы поделиться своим решением: Это требует от вас подкласса 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

Разве не белое сияние, которое я вижу в тени? У вас нет набора смещений, поэтому он делает именно то, что вы хотите. Для тени установите цвет в черный цвет и дайте ему смещение, возможно, 3,5 или что-то еще.