Добавление тени в UITableView - PullRequest
16 голосов
/ 26 января 2012

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

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

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

Ответы [ 3 ]

48 голосов
/ 26 января 2012

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

self.tableView.clipsToBounds = NO;
self.tableView.layer.masksToBounds = NO;
4 голосов
/ 30 марта 2013

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

0 голосов
/ 26 января 2012

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

...