Ocultar eliminar línea de separación si UITableViewCells está vacío

Tengo un UITableView y tengo solo 3 filas en él, y puedo ver esas 3 filas. El problema es que las celdas están vacías: puedo ver líneas allí. No quiero ver esas líneas.

¿Alguna idea de cómo eliminar esas líneas?

A continuación se muestra la imagen de lo que estoy buscando.

Enlace de imágen

Puede ocultar la línea separadora estándar de UITableView utilizando uno de los siguientes fragmentos de código. La forma más fácil de agregar un separador personalizado es agregar una UIView simple de 1px de altura:

 UIView* separatorLineView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 1)]; separatorLineView.backgroundColor = [UIColor clearColor]; // set color as you want. [cell.contentView addSubview:separatorLineView]; 

O

  self.tblView=[[UITableView alloc] initWithFrame:CGRectMake(0,0,320,370) style:UITableViewStylePlain]; self.tblView.delegate=self; self.tblView.dataSource=self; [self.view addSubview:self.tblView]; UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 10)]; v.backgroundColor = [UIColor clearColor]; [self.tblView setTableHeaderView:v]; [self.tblView setTableFooterView:v]; [v release]; 

O

 - (float)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section { // This will create a "invisible" footer return 0.01f; } - (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { // To "clear" the footer view return [[UIView new] autorelease]; } 

O

Y también verifique la respuesta de nickfalk , es muy breve y útil también. Y también debes probar esta única línea,

 self.tableView.tableFooterView = [[UIView alloc] init]; 

No estoy seguro pero funciona en todas las versiones de iOS que revisé, con iOS 5 y posterior, hasta iOS 7.

Incluso más simple que la respuesta de Andrey Z: simplemente haz un tableFooterView falso en tu clase UITableView:

 self.tableFooterView = [UIView new]; // to hide empty cells 

y Swift:

tableFooterView = UIView()

UIView transparente como un tableView página tableView con una altura de 1px hará el truco.

 UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 1)]; v.backgroundColor = [UIColor clearColor]; [self.tableView setTableFooterView:v]; 
 self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero]; 

Respuesta actualizada para swift y iOS 9. Esto funciona para las vistas de tabla de la variedad .Plain .

  tableView.tableFooterView = UIView() 

Use este código para eliminar la línea de separación de las celdas vacías.

  - (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section { // This will create a "invisible" footer return 0.01f; } - (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { return [UIView new]; // If you are not using ARC: // return [[UIView new] autorelease]; } 

Por favor intente con el siguiente código:

 self.tblView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero]; if ([self.tblView respondsToSelector:@selector(setSeparatorInset:)]) { [self.tblView setSeparatorInset:UIEdgeInsetsZero]; } // write in view did load 

Solo devolviendo un UIView() vacío en viewForFooterInSection funcionó para mí:

 override func tableView(tableView: UITableView, viewForFooterInSection section: Int) -> UIView? { return UIView() } 

Puedes usar

 tableForBrands.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero]; 

Funcionó para mí …

Ninguna de las respuestas sugeridas fue adecuada para mi problema similar. Implementando este método en el delegado de TableView finalmente funcionó:

 - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { tableView.separatorStyle = UITableViewCellSeparatorStyleNone; } 

Si está utilizando Storyboards, puede arrastrar y soltar un UIView en su UITableView debajo de sus celdas y establecer su altura en 0. (Solo se ha probado en un proyecto de iOS 8)

Supongo que esto es lo que estás buscando.

 - (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{ return 1.0f; } 

Puede configurar la vista de tabla para que se agrupe en lugar de simple: esto cambia el aspecto un poco, pero al menos elimina las líneas adicionales.

Tuve este problema exacto y terminé cambiando a vistas agrupadas. Se ve mucho mejor.

Algunas de las sugerencias anteriores contienen un GRAN error conceptual:

si lo haces:

[cell addSubview: ….

incluso cuando se “reutiliza” una celda, ¡se agregará una nueva subvista para el divisor!

evitarlo de dos maneras:

a) use un TAG, y: 1) solicite una subvista para esa etiqueta let divider = cell.viewWithTag (TAG) … 2) si está presente, NO agregue otra subvista 3) si NO está presente agregue AND tag.

b) cree una vista personalizada y AGREGUE su divisor personalizado en “init” “awakeFromNib” de la celda personalizada.

código para a):

  if let divider = cell.viewWithTag(DIVIDER_TAG) as? UIView{ // nothing.. eventually change color bases in IndexPath... }else{ let frame = CGRectMake(0, cell.frame.height-1, cell.frame.width, 1) divider.tag = DIVIDER_TAG divider.backgroundColor = UIColor.redColor() cell.addSubview(divider) } 

Solución Swift: tableView.tableFooterView = UIView (frame: CGRectZero)

Trabajó en Xcode 7.2

Dentro de cellForRowAtIndexPath

 let separatorLineView:UIView = UIView(frame: CGRectMake(0,0,self.tableview.bounds.width,0.5)) separatorLineView.backgroundColor = tableView.separatorColor cell!.contentView.addSubview(separatorLineView) 

Agregue la siguiente línea en UITableViewDataSource numberOfRowsInSection: method.

 tableView.separatorColor = [UIColor clearColor];