UITableView con encabezados de sección fija

Greets, estoy leyendo que el comportamiento pnetworkingeterminado de UITableView es UITableView filas del encabezado de la sección a la parte superior de la tabla mientras se desplaza por las secciones hasta que la siguiente sección empuja la fila de la sección previa a la vista.

Tengo una UITableView dentro de UIViewController y este no parece ser el caso.

¿Es solo el comportamiento UITableViewController para UITableViewController ?

Aquí hay un código simplificado basado en lo que tengo. UIController interfaz de UIController y el método de vista de tabla que he implementado para crear la vista de tabla. Tengo una class de origen de datos auxiliar que me ayuda a indexar mis objects para usarlos con la tabla.

  @interface MyUIViewController ()<UITableViewDelegate, UITableViewDataSource> @property (nonatomic, readonly) UITableView *myTableView; @property (nonatomic, readonly) MyCustomHelperDataSource *helperDataSource; @end //when section data is set, get details for each section and reload table on success - (void)setSectionData:(NSArray *)sections { super.sectionData = sections; //this array drives the sections //get additional data for section details [[RestKitService shanetworkingClient] getSectionDetailsForSection:someId success:^(RKObjectRequestOperation *operation, RKMappingResult *details) { NSLog(@"Got section details data"); _helperDataSource = [[MyCustomHelperDataSource alloc] initWithSections:sections andDetails:details.array]; [myTableView reloadData]; } failure:^(RKObjectRequestOperation *operation, NSError *error) { NSLog(@"Failed getting section details"); }]; } #pragma mark <UITableViewDataSource, UITableViewDelegate> - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { if (!_helperDataSource) return 0; return [_helperDataSource countSectionsWithDetails]; //number of section that have details rows, ignore any empty sections } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { //get the section object for the current section int SectionObject *section = [_helperDataSource sectionObjectForSection:section]; //return the number of details rows for the section object at this section return [_helperDataSource countOfSectionDetails:section.sectionId]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell * cell; NSString *CellIdentifier = @"SectionDetailCell"; cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier]; cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; cell.textLabel.font = [UIFont systemFontOfSize:12.0f]; } //get the detail object for this section SectionObject *section = [_helperDataSource sectionObjectForSection:indexPath.section]; NSArray* detailsForSection = [_helperDataSource detailsForSection:section.sectionId] ; SectionDetail *sd = (SectionDetail*)[detailsForSection objectAtIndex:indexPath.row]; cell.textLabel.text = sd.displayText; cell.detailTextLabel.text = sd.subText; cell.detailTextLabel.textColor = [UIColor blueTextColor]; return cell; } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return 50.0f; } - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { return 30.0f; } - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger) section { //get the section object for the current section SectionObject *section = [_helperDataSource sectionObjectForSection:section]; NSString *title = @"%@ (%d)"; return [NSString stringWithFormat:title, section.name, [_helperDataSource countOfSectionDetails:section.sectionId]]; } - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { UIView *header = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 260, 0)]; header.autoresizingMask = UIViewAutoresizingFlexibleWidth; header.backgroundColor = [UIColor darkBackgroundColor]; SSLabel *label = [[SSLabel alloc] initWithFrame:CGRectMake(3, 3, 260, 24)]; label.font = [UIFont boldSystemFontOfSize:10.0f]; label.verticalTextAlignment = SSLabelVerticalTextAlignmentMiddle; label.backgroundColor = [UIColor clearColor]; label.text = [self tableView:tableView titleForHeaderInSection:section]; label.textColor = [UIColor whiteColor]; label.shadowColor = [UIColor darkGrayColor]; label.shadowOffset = CGSizeMake(1.0, 1.0); [header addSubview:label]; return header; } 

Los encabezados solo permanecen fijos cuando la propiedad UITableViewStyle de la tabla se establece en UITableViewStylePlain . Si lo establece en UITableViewStyleGrouped , los encabezados se desplazarán hacia arriba con las celdas.

También puede establecer la propiedad de rebotes de tableview en NO. Esto mantendrá los encabezados de sección no flotantes / estáticos, pero también perderá la propiedad de rebote de tableview.

Cambia tu estilo de TableView:

self.tableview = [[UITableView alloc] initwithFrame: estilo de ttwig: UITableViewStyleGrouped];

Según la documentation de Apple para UITableView:

UITableViewStylePlain: una vista de tabla sin formatting. Los encabezados o pies de página de sección se muestran como separadores en línea y flotan cuando se desplaza la vista de la tabla.

UITableViewStyleGrouped: una vista de tabla cuyas secciones presentan distintos grupos de filas. Los encabezados y pies de página de sección no flotan.

Espero que este pequeño cambio te ayude …

Swift 3.0

Cree un ViewController con los protocolos UITableViewDelegate y UITableViewDataSource . Luego crea una tableView dentro de ella, declarando que su estilo es UITableViewStyle.grouped . Esto arreglará los encabezados.

 lazy var tableView: UITableView = { let view = UITableView(frame: UIScreen.main.bounds, style: UITableViewStyle.grouped) view.delegate = self view.dataSource = self view.separatorStyle = .none return view }() 

Ahora su vista de tabla parece un estilo de tabla simple, pero no flote el estilo de tabla de configuration de buz configurado para agrupar.

 [_tableView setBackgroundView:nil]; _tableView.backgroundColor = [UIColor whiteColor];