Agregar iOS UITableView HeaderView (no encabezado de sección)

Quiero agregar un encabezado de tabla (no encabezados de sección) como en la aplicación de contactos, por ejemplo: enter image description here

exactamente así – una etiqueta al lado de una imagen arriba de la mesa.

Quiero que todas las vistas sean desplazables, así que no puedo ubicarlas fuera de la mesa.

¿Cómo puedo hacer eso?

UITableView tiene una propiedad tableHeaderView . Ponlo en la vista que quieras allí arriba.

Use un nuevo UIView como contenedor, agregue una etiqueta de texto y una vista de imagen a ese nuevo UIView , luego configure tableHeaderView en la nueva vista.

Por ejemplo, en un UITableViewController :

 -(void)viewDidLoad { // ... UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(XXX, YYY, XXX, YYY)]; UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(XXX, YYY, XXX, YYY)]; [headerView addSubview:imageView]; UILabel *labelView = [[UILabel alloc] initWithFrame:CGRectMake(XXX, YYY, XXX, YYY)]; [headerView addSubview:labelView]; self.tableView.tableHeaderView = headerView; [imageView release]; [labelView release]; [headerView release]; // ... } 

Puedes hacerlo bastante fácil en Interface Builder. Simplemente cree una vista con una tabla y coloque otra vista sobre la mesa. Esta se convertirá en la vista de encabezado de la tabla. Agregue sus tags e imagen a esa vista. Vea la imagen a continuación para ver la jerarquía. Ver jerarquía en el generador de interfaz

En Swift :

 override func viewDidLoad() { super.viewDidLoad() // We set the table view header. let cellTableViewHeader = tableView.dequeueReusableCellWithIdentifier(TableViewController.tableViewHeaderCustomCellIdentifier) as! UITableViewCell cellTableViewHeader.frame = CGRectMake(0, 0, self.tableView.bounds.width, self.heightCache[TableViewController.tableViewHeaderCustomCellIdentifier]!) self.tableView.tableHeaderView = cellTableViewHeader // We set the table view footer, just know that it will also remove extra cells from tableview. let cellTableViewFooter = tableView.dequeueReusableCellWithIdentifier(TableViewController.tableViewFooterCustomCellIdentifier) as! UITableViewCell cellTableViewFooter.frame = CGRectMake(0, 0, self.tableView.bounds.width, self.heightCache[TableViewController.tableViewFooterCustomCellIdentifier]!) self.tableView.tableFooterView = cellTableViewFooter } 

También puede simplemente crear ÚNICAMENTE una UIView en el constructor Interfaz y arrastrar y soltar ImageView y UILabel (para que se vea como el encabezado deseado) y luego usar eso.

Una vez que su UIView tenga la apariencia que usted también quiere, puede inicializarlo desde el XIB y agregarlo a su UITableView. En otras palabras, no es necesario diseñar la tabla COMPLETA en IB. Solo el headerView (de esta manera, la vista de encabezado también se puede reutilizar en otras tablas)

Por ejemplo, tengo una UIView personalizada para uno de los encabezados de mi tabla. La vista es administrada por un archivo xib llamado “CustomHeaderView” y se carga en el encabezado de la tabla utilizando el siguiente código en mi subclase UITableViewController:

 -(UIView *) customHeaderView { if (!customHeaderView) { [[NSBundle mainBundle] loadNibNamed:@"CustomHeaderView" owner:self options:nil]; } return customHeaderView; } - (void)viewDidLoad { [super viewDidLoad]; // Set the CustomerHeaderView as the tables header view self.tableView.tableHeaderView = self.customHeaderView; } 
 - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0,0,tableView.frame.size.width,30)]; headerView.backgroundColor=[[UIColor redColor]colorWithAlphaComponent:0.5f]; headerView.layer.borderColor=[UIColor blackColor].CGColor; headerView.layer.borderWidth=1.0f; UILabel *headerLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 5,100,20)]; headerLabel.textAlignment = NSTextAlignmentRight; headerLabel.text = @"LeadCode "; //headerLabel.textColor=[UIColor whiteColor]; headerLabel.backgroundColor = [UIColor clearColor]; [headerView addSubview:headerLabel]; UILabel *headerLabel1 = [[UILabel alloc] initWithFrame:CGRectMake(60, 0, headerView.frame.size.width-120.0, headerView.frame.size.height)]; headerLabel1.textAlignment = NSTextAlignmentRight; headerLabel1.text = @"LeadName"; headerLabel.textColor=[UIColor whiteColor]; headerLabel1.backgroundColor = [UIColor clearColor]; [headerView addSubview:headerLabel1]; return headerView; }