Sección UITableView con background clearColor?

Tengo un ViewController con un background degradado radial. Dentro de eso tengo una UITableView con celdas y secciones. Ahora quiero mostrar el gradiente detrás de la vista de la tabla mientras se desplaza. El problema es que cuando la sección se bloquea en la parte superior puede ver las celdas detrás de la sección. Yo establecería el color de background de la sección, pero si lo hago no coincide con el background del gradiente radial. ¿Hay alguna forma de tener las celdas de clip debajo de las secciones mientras se mantiene el background clearColor?

si lo entiendo, quiere una tabla de vista completamente clara y una celda de vista de tabla para que pueda ver el background de su controller de vista.

Puede lograr esto estableciendo tableview como sin background

tableview.backgroundColor = [UIColor clearColor]; tableView.opaque = NO; tableView.backgroundView = nil; 

y también la celda

 cell.backgroundColor = [UIColor clearColor] 

si también desea que la sección sea transparente, puede usar este método:

 - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { 

para hacer una vista personalizada (por ejemplo, cree una vista de image con un .png transparente para el background)

Espero haber entendido correctamente tu pregunta.


editar después de la aclaración

para dar la apariencia de que las celdas se detienen antes de pasar por debajo del encabezado de la sección:

Haga una class que sea una subclass de uitableview con este ivar:

 @interface CustomTableView : UITableView { CAGradientLayer* maskLayer; } 

obviamente, esto creará un gradiente pero si lo desea, puede modificarlo o usar CALayer y, en lugar de crear la máscara mediante progtwigción, cree un .png con el ancho / alto correcto de su encabezado de sección.

DE CAGradientLayer : si usa el CAGradientLayer :

 - (id)initWithCoder:(NSCoder *)coder { self = [super initWithCoder:coder]; if (self) { [self setupGradients]; //call your method } return self; } - (void)setupGradients { [self addObserver:self forKeyPath:@"contentOffset" options:0 context:nil]; */ ***** if you choose to use CALayer instead of CAGradient ****** */ //maskLayer = [[CALayer layer] retain]; //maskLayer.contents = (id) [UIImage imageNamed:@"maskLayer.png"].CGImage; //maskLayer.backgroundColor = [UIColor clearColor].CGColor; */ ***** if you choose to use CALayer instead of CAGradient ****** */ maskLayer = [[CAGradientLayer layer] retain]; CGColorRef outerColor = [UIColor colorWithWhite:1.0 alpha:0.0].CGColor; CGColorRef innerColor = [UIColor colorWithWhite:1.0 alpha:1.0].CGColor; maskLayer.colors = [NSArray arrayWithObjects:(id)outerColor, (id)innerColor, (id)innerColor, (id)outerColor, nil]; maskLayer.locations = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0], [NSNumber numberWithFloat:0.0], [NSNumber numberWithFloat:0.9], [NSNumber numberWithFloat:1.0], nil]; //this creates a gradient effect. Tweak these numbers for a hard line. maskLayer.bounds = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height); maskLayer.anchorPoint = CGPointZero; self.layer.mask = maskLayer; } - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { [CATransaction begin]; [CATransaction setDisableActions:YES]; maskLayer.position = CGPointMake(0, self.contentOffset.y); [CATransaction commit]; } 

luego en su controller de vista:

  CustomTableView *_tableView; //ivar _tableView = [[CustomTableView alloc] initWithFrame:YOUR_FRAME]; 

La idea básica es una máscara, crea una forma de máscara en la parte superior de la vista de tabla que tiene el mismo tamaño que el encabezado de la sección. Aparecerá que las celdas "desaparecen" detrás de él. Es un poco complicado, pero funcionará.

Forma simple de get un encabezado de sección transparente sin crear sus propias vistas de encabezado.

 - (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section { if ([view isKindOfClass:[UITableViewHeaderFooterView class]]) { UITableViewHeaderFooterView *headerView = (UITableViewHeaderFooterView *)view; headerView.contentView.backgroundColor = [UIColor clearColor]; headerView.backgroundView.backgroundColor = [UIColor clearColor]; } } 

Esta pieza de código funciona perfectamente bien en iOS 7.

EDIT Sé que esto es un poco tarde, pero junto con esto, debes agregar 2 líneas asegurándote de que el color de background (y el color de background de la vista de background) de la vista adecuada también esté claro.

 tableView.backgroundColor = [UIColor clearColor]; tableView.backgroundView.backgroundColor = [UIColor clearColor];