UITableView no flotan encabezados de sección

¿Es posible no flotar los encabezados de sección para un UITableView con el estilo UITableViewStylePlain ?

Estoy construyendo AcaniChat, una versión de código abierto de la aplicación de posts nativa de iPhone , y quiero hacer los encabezados de la sección de marcas de time, pero no deberían flotar.

Sé que los encabezados de sección no flotan para las vistas de tabla del estilo UITableViewStyleGrouped , pero ese estilo parece less a lo que estoy buscando. ¿Debo usar ese estilo y el estilo de la vista de la tabla para que se vea como quiero?

Podría hacer eso si puedo averiguar cómo hacer https://stackoverflow.com/questions/6564712/nsfetchedresultscontroller-nsdate-section-headers .

Supongo que tendrás que usar dos types de tablas de tabla personalizadas o omitir la vista de tabla por completo y trabajar en una vista de desplazamiento simple para lograr este tipo de estilo.

Lo interesante de UITableViewStyleGrouped es que tableView agrega el estilo a las celdas y no a TableView.

El estilo se agrega como backgroundView a las celdas como una class llamada UIGroupTableViewCellBackground que se encarga de dibujar diferentes backgrounds de acuerdo con la position de la celda en la sección.

Por lo tanto, una solución muy simple será usar UITableViewStyleGrouped, establecer el color de background de la tabla para clearColor y simplemente replace la backgroundView de la celda en cellForRow:

 cell.backgroundView = [[[UIView alloc] initWithFrame:cell.bounds] autorelease]; 

Esto ahora se puede hacer en dos pasos rápidos y rápidos (iOS 6 solamente):

  1. Cambie su estilo UITableView a UITableViewStyleGrouped. (Puede hacer esto desde Storyboard / NIB, o a través del código).

  2. A continuación, configure la vista de background de su vista de tabla en una vista vacía como tal [en un método como viewDidAppear o incluso en el método cellForRow (aunque preferiría el primero)].

 yourTableView.backgroundView = [[UIView alloc] initWithFrame:listTableView.bounds]; 

Voila, ahora tienes tu vista de tabla, pero sin los encabezados de la sección flotante. ¡Los encabezados de su sección ahora se desplazan junto con las celdas y se resuelven los problemas de la interfaz de usuario desorderada!

Esto funciona porque UITableViewStyleGrouped parece funcionar ahora al agregar una vista de background a una UITableView normal, pero sin los encabezados de sección flotante. [NB Anterior a iOS 6, se agregaron imágenes de background individuales a UITableViewCell's.]

Prueba esto y dime cómo va. Codificación feliz 🙂

EDIT: para iOS 7, simplemente cambie el estilo de vista de tabla a ' UITableViewStyleGrouped ' y cambie el color de tinte de la vista a 'claro de color'.

Puede lograr esto colocando los encabezados en sus propias secciones. Primero duplica tu número de secciones. Luego, para las secciones pares, regrese su encabezado como el encabezado y cero como el número de filas. Para las secciones con numbers impares, devuelve nil para el encabezado.

Suponiendo que esté usando un NSFetchedResultsController, se vería algo como esto:

 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return self.fetchedResultsController.sections.count * 2; } - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { if ((section % 2) == 0) { section /= 2; id<NSFetchedResultsSectionInfo> sectionInfo = self.fetchedResults.sections[section]; return sectionInfo.name; } else { return nil; } } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { if ((section % 2) == 0) { return 0; } else { section /= 2; id<NSFetchedResultsSectionInfo> sectionInfo = self.fetchedResults.sections[section]; return sectionInfo.numberOfObjects; } } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { if ((indexPath.section % 2) == 0) { return nil; } else { indexPath = [NSIndexPath indexPathForRow:indexPath.row inSection:indexPath.section/2]; id object = [self.fetchedResultsController objectAtIndexPath:indexPath]; // configure your cell here. } }