Сгруппированный UITableView с тенью - PullRequest
2 голосов
/ 25 мая 2011

Я пытаюсь добавить тень позади моего сгруппированного UITableView с пользовательским фоном.Это тяжело.Я провалился.Я экспериментировал с параметрами тени слоя ячейки, но как бы я это ни делал, тень в итоге покрывает другую ячейку с одной стороны.Я просто хочу, чтобы тень появлялась равномерно за пределами контуров каждого раздела в табличном представлении.

Если у кого-то есть идеи о том, как решить эту проблему самым простым способом, было бы очень признательно!

1 Ответ

0 голосов
/ 01 сентября 2011

для дальнейшего использования;в конце концов, я решил это с помощью пользовательского подкласса UITableView, который добавил пустой, но затененный слой в метод layoutSubviews:

ShadowTableView.h:

@interface ShadowTableView : UITableView {
    CALayer *shadowLayer;
}

@end

ShadowTableView.m:

#import "ShadowTableView.h"
#import <QuartzCore/QuartzCore.h>

@implementation ShadowTableView

- (id)initWithFrame:(CGRect)frame style:(UITableViewStyle)style {
    self = [super initWithFrame:frame style:style];
    if (self) {
        shadowLayer = [[CALayer alloc] init];

        shadowLayer.backgroundColor = [kCellBgColor CGColor];
        shadowLayer.cornerRadius = 10.0;
        shadowLayer.shadowOpacity = 1.6;
        shadowLayer.shadowOffset = CGSizeMake(0, 3);
        shadowLayer.shadowColor = [[UIColor blackColor] CGColor];
        shadowLayer.shadowRadius = 8.0;
    }
    return self;
}

- (void)dealloc {
    [shadowLayer release];

    [super dealloc];
}

- (void)layoutSubviews {
    [super layoutSubviews];

    if (!shadowLayer.superlayer) {
        [self.layer insertSublayer:shadowLayer atIndex:0];
    }

    shadowLayer.frame = CGRectMake(10.0, 10.0, 300.0,
        self.rowHeight * [self.dataSource tableView:self numberOfRowsInSection:0] + 1);
}

@ end

...