Cómo establecer un background claro para UITableView Header con cuerpo opaco

¿Cómo puedo hacer que el background de un tableHeaderView sea claro , pero mantener opaco el rest del background UITableView?

Estoy usando una tableHeaderView transparente para un efecto paralax. El object detrás de tableView es una "window" tableHeaderView más larga que clara, así puedo centrar los datos visibles. Esto funciona bien para lists más largas ya que puedo usar tableView como una máscara, pero cuando no tengo suficientes celdas en la tabla, el object de background se muestra debajo de las celdas.

Código relevante:

self.tableView.backgroundView = nil; self.tableView.backgroundColor = [UIColor whiteColor]; UIView *tableHeaderView = [[UIView alloc] initWithFrame: CGRectMake(0.0, 0.0, 320.0, 250.0)]; tableHeaderView.backgroundColor = [UIColor clearColor]; self.tableView.tableHeaderView = tableHeaderView; 

He intentado establecer un color de background para el tableView, pero eso hace que todo el UITableView opaco (incluido el tableHeaderView), eliminando la "window" que tengo en la parte superior.

¿Alguna idea sobre cómo puedo mantener mi transparent tableHeaderView mientras establezco el cuerpo de UITableView opaco?

¡Gracias!

Después de un par de días pude resolverlo. La premisa de la solución es agregar una subvista a la vista de background de la tabla y cambiar el marco de la subvista a medida que se desplaza.

El código relevante en viewDidLoad:

 ... // Create the UIView that will become the tableView backgroundView UIView *tableViewBackground = [[UIView alloc] initWithFrame:self.tableView.frame]; tableViewBackground.backgroundColor = [UIColor clearColor]; // Create the opaque backgroundView and set the frame so that it starts below the headerView partialBackgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, 250, 320.0, self.view.frame.size.height)]; partialBackgroundView.backgroundColor = [UIColor networkingColor]; // Add the partial background to the main background view and apply it to the tableView [tableViewBackground addSubview:solidTableBodyBackgroundView]; self.tableView.backgroundView = tableViewBackground; ... 

Y luego, mientras se desplaza, puede actualizar la "window visible" en scrollViewDidScroll:

 - (void)scrollViewDidScroll:(UIScrollView *)scrollView { CGFloat scrollOffset = scrollView.contentOffset.y; partialBackgroundView.frame = CGRectMake(0, 250 - scrollOffset, 320, self.view.frame.size.height); // Other parallax code for scrolling } 

Puede haber mejores forms de hacerlo, pero encontré que esto era bastante simple y funcionó bien.

Forma más simple de hacer una respuesta aceptada para múltiples secciones

 // Set the view for each cell with a clear color -(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, SectionHeaderHeight)]; // view.backgroundColor = [UIColor clearColor]; return view; } // Set the height of your desinetworking header -(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { return 10; } 

A less que no entienda algo, debería poder hacerlo en dos pasos:

  1. Deberá hacer que las celdas de la table estén opacas. Deje el color de background de la tablaView en [UIColor clearColor], y lo mismo ocurre con las vistas para el encabezado de la tabla (y los encabezados de la sección, si corresponde).

  2. Luego, tome la vista de su pie de tabla (propiedad tableFooterView de UITableView ), UITableView opaca y UITableView muy alta. Cuando solo tiene unas pocas celdas en la tabla, el pie de página de la tabla ocupará el rest de la pantalla.

Una vez más, podría estar malentendiendo algo, pero dale una oportunidad y mira lo que obtienes. ¡Buena suerte!