Eliminar separadores adicionales debajo de UITableView

Cuando configuro una vista de tabla con 4 filas, todavía hay líneas de separadores adicionales (o celdas en blanco adicionales) debajo de las filas rellenas.

¿Cómo eliminaría estas células?

imagen para líneas separadoras adicionales en UITableView

Constructor de interfaz (iOS 9+)

Simplemente arrastre una UIView a la mesa. En el guión gráfico, se ubicará en la parte superior debajo de sus celdas personalizadas. Puede preferir llamarlo “pie de página”.

Aquí se muestra en verde para mayor claridad, es probable que desee un color claro.

Tenga en cuenta que al ajustar la altura, puede afectar cómo se maneja el “rebote del fondo” de la tabla, como prefiera. (La altura cero por lo general es buena).

enter image description here


Para hacerlo programáticamente

Rápido

override func viewDidLoad() { super.viewDidLoad() self.tableView.tableFooterView = UIView() } 

C objective

iOS 6.1+

 - (void)viewDidLoad { [super viewDidLoad]; // This will remove extra separators from tableview self.tableView.tableFooterView = [UIView new]; } 

o si lo prefieres,

  self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero]; 

Históricamente en iOS:

Agregar al controlador de vista de tabla …

 - (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section { // This will create a "invisible" footer return CGFLOAT_MIN; } 

y si es necesario …

 - (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { return [UIView new]; // If you are not using ARC: // return [[UIView new] autorelease]; } 

Aquí hay otra manera de hacerlo sin el estilo de tabla agrupada, y uno que probablemente no adivinará. Agregar un encabezado y un pie de página a la tabla (quizás uno u otro sea suficiente, no se haya comprobado) hace que los separadores desaparezcan de las filas de relleno / en blanco.

Me encontré con esto porque quería un pequeño espacio en la parte superior e inferior de las mesas para disminuir el riesgo de presionar los botones en lugar de una celda de la mesa con los dedos carnosos. Aquí hay un método para pegar una vista en blanco como encabezado y pie de página. Use la altura que desee, aún así eliminará las líneas de separación adicionales.

 - (void) addHeaderAndFooter { UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 10)]; v.backgroundColor = [UIColor clearColor]; [self.myTableView setTableHeaderView:v]; [self.myTableView setTableFooterView:v]; [v release]; } 

En respuesta a @Casebash, volví al código en mi aplicación (Administrador de listas “AcmeLists” en la tienda iTunes …) y cortocircuité el método addHeaderAndFooter para verificar. Sin eso , tengo los separadores de fila adicionales; con el código, tengo lo que ves en este complemento de ventana: no hay una imagen de separadores de fila de tabla . Así que no estoy seguro de por qué no hubiera funcionado para ti. Además, tiene sentido para mí que tener cualquier pie de página personalizado en una vista de tabla necesariamente tenga que dejar de dibujar separadores de fila para filas en blanco debajo de él. Eso sería horrible Como referencia, miré las tablas donde había más filas de las que se podían ver en la pantalla, y luego para una tabla con dos filas. En ambos casos, no hay separadores extraños.

Quizás sus vistas personalizadas no se hayan agregado realmente. Para verificarlo, configure el color de fondo en algo que no sea clearColor , por ejemplo, [UIColor redColor] . Si no ve algunas barras rojas en la parte inferior de la tabla, su pie de página no estaba configurado.

Extracción de líneas de separación adicionales para filas vacías en UITableView en Swift

 override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. self.yourTableview.tableFooterView = UIView() } 

Me gustaría extender la respuesta de wkw :

Simplemente agregar solo pie de página con altura 0 hará el truco. (probado en SDK 4.2, 4.4.1)

 - (void) addFooter { UIView *v = [[UIView alloc] initWithFrame:CGRectZero]; [self.myTableView setTableFooterView:v]; } 

o incluso más simple: donde configura su vista de tabla, agregue esta línea:

 //change height value if extra space is needed at the bottom. [_tableView setTableFooterView:[[UIView alloc] initWithFrame:CGRectMake(0,0,0,0)]]; 

o incluso simplier – simplemente eliminar cualquier separador:

 [_tableView setTableFooterView:[UIView new]]; 

Gracias a wkw nuevamente 🙂

Para iOS 7+ con Storyboards

Simplemente arrastre un UIView en su UITableView como pie de página. Establezca la altura de la vista del pie de página en 0.

Prueba esto. Funcionó para mí:

 - (void) viewDidLoad { [super viewDidLoad]; // Without ARC //self.tableView.tableFooterView = [[[UIView alloc] init] autorelease]; // With ARC, tried on Xcode 5 self.tableView.tableFooterView = [UIView new]; } 

Para Swift:

  override func viewDidLoad() { super.viewDidLoad() tableView.tableFooterView = UIView() } 

Si está utilizando Swift, agregue el siguiente código para verDidLoad del controlador que administra la tabla vista:

 override func viewDidLoad() { super.viewDidLoad() //... // Remove extra separators tableView.tableFooterView = UIView(frame: CGRectZero) } 

Avanzando en la solución de J. Costa: puede hacer un cambio global en la tabla al poner esta línea de código:

 [[UITableView appearance] setTableFooterView:[[UIView alloc] initWithFrame:CGRectZero]]; 

dentro del primer método poOSible (generalmente en AppDelegate, en: application: didFinishLaunchingWithOptions: method).

Simplemente puede agregar un pie de página vacío al final, ocultará las celdas vacías, pero también se verá bastante feo:

 tableView.tableFooterView = UIView() 

enter image description here

Hay un mejor enfoque: agregue una línea de 1 punto al final de la vista de tabla ya que el pie de página y las celdas vacías tampoco se mostrarán más.

 let footerView = UIView() footerView.frame = CGRect(x: 0, y: 0, width: tableView.frame.size.width, height: 1) footerView.backgroundColor = tableView.separatorColor tableView.tableFooterView = footerView 

enter image description here

solo agregue este código ( Swift ). .

 tableView.tableFooterView = UIView() 

Estaba usando una vista de tabla para mostrar un número fijo de columnas, así que simplemente cambié el tamaño y lo convertí en no desplazable.

Sé que esta pregunta ha sido aceptada, pero aquí UITableView diferentes maneras de cómo ocultar la línea adicional de separador de UITableView .

Puede ocultar la línea de separador estándar de tableView y agregar su línea personalizada en la parte superior de cada celda.

Actualizar:

La forma más sencilla 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 grayColor]; /// may be here is clearColor; [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 la mejor y simple manera que me gusta es

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

Prueba cualquiera de uno;

uitableview extra separator line hide extra separators lines hide in swift 3.0

  self.tbltableView.tableFooterView = UIView(frame: .zero) 

Simplemente agregue una vista con el color del separador deseado como color de fondo, 100% de ancho, 1px de alto en la posición x0 y-1 a su tableViewCell. Asegúrese de que tableViewCell no recorta las subvistas, en su lugar debe hacerlo tableView.

Así que obtienes un separador simple y funcional solo entre las celdas existentes sin ningún truco por código o IB.

Nota: En un rebote superior vertical aparece el primer separador, pero eso no debería ser un problema porque es el comportamiento predeterminado de iOS.

SWIFT 3.0 funciona muy bien con tableView.tableFooterView = UIView()

Si no desea ningún separador después de la última celda, necesita una altura cercana a cero pero no cero para su pie de página.

En su UITableViewDelegate :

 func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat { return .leastNormalMagnitude } 

Para eliminar las líneas de separador adicionales de la parte inferior de UItableview mediante progtwigción, simplemente escriba las dos líneas siguientes de código y eliminará el separador adicional de la misma.

tableView.sectionFooterHeight = 0.f;

tableView.sectionHeaderHeight = 0.f;

Este truco funciona para mí todo el tiempo, pruébate. @KPCoding …

Prueba esto

 self.tables.tableFooterView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 10.0f)]; 

Tuve algo de suerte al implementar una sola pieza de la respuesta aceptada (iOS 9+, Swift 2.2). Intenté implementar:

 self.tableView.tableFooterView = UIView(frame: .zero) 

Sin embargo, no había ningún efecto en mi tableView , creo que puede tener algo que ver con el hecho de que estaba usando UITableViewController .

En cambio, solo tuve que anular el método viewForFooterInSection (no configuré tableFooterView otro lugar):

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

Esto funcionó bien para una vista de tableView con una sola sección (si tiene varias secciones, debe especificar la última).

Si desea eliminar el espacio no deseado en UITableview, puede usar debajo dos métodos

 - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{ return 0.1; } - (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section { return 0.1; } 

Rápido y fácil Swift 4 vías.

 override func viewDidLoad() { tableView.tableFooterView = UIView(frame: .zero) } 

Si tiene células estáticas. También puede desactivar el separador de la ventana del Inspector. (Esto no será deseable si necesita el separador. En ese caso, use el método que se muestra arriba) ventana del inspector

Si está subclasificando el UITableView, necesita hacer esto …

 -(void)didMoveToSuperview { [super didMoveToSuperview]; self.tableFooterView = [UIView new]; } 

En caso de que tenga una barra de búsqueda en su vista (para limitar el número de resultados, por ejemplo), también debe agregar lo siguiente en shouldReloadTableForSearchString y shouldReloadTableForSearchScope:

 controller.searchResultsTable.footerView = [ [ UIView alloc ] initWithFrame:CGRectZero ]; 

Detalles: Swift 3, Xcode: 8.1

Código

 extension UITableView { var emptyCellsEnabled: Bool { set(newValue) { if newValue { tableFooterView = nil } else { tableFooterView = UIView() } } get { if tableFooterView == nil { return true } return false } } } 

Uso

 // hide empty cells tableView.emptyCellsEnabled = false // show empty cells tableView.emptyCellsEnabled = true 

Ejemplo completo

ViewController.swift

 import UIKit class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource{ @IBOutlet weak var tableView: UITableView! @IBOutlet weak var footerSwitchButton: UIButton! var emptyCellsEnabled: Bool { get { return tableView.emptyCellsEnabled } set (newValue) { if newValue { footerSwitchButton.setTitle("Hide", for: .normal) } else { footerSwitchButton.setTitle("Show", for: .normal) } tableView.emptyCellsEnabled = newValue } } override func viewDidLoad() { super.viewDidLoad() tableView.delegate = self tableView.dataSource = self } func numberOfSections(in tableView: UITableView) -> Int { return 1 } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 3 } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = UITableViewCell() cell.textLabel?.text = "\(indexPath)" return cell } @IBAction func buttonAction(_ sender: Any) { emptyCellsEnabled = !emptyCellsEnabled } } extension UITableView { var emptyCellsEnabled: Bool { set(newValue) { if newValue { tableFooterView = nil } else { tableFooterView = UIView() } } get { if tableFooterView == nil { return true } return false } } } 

Main.storyboard

                                                                       

Resultado

enter image description here enter image description here

Acabo de agregar esta línea en la función ViewDidLoad y solucionó el problema.

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

Si solo tiene una sección, la forma más rápida y sencilla es simplemente configurar el estilo de vista de tabla desde “Normal” a “Agrupado”. (ver imagen)

TableView agrupado

Si tiene más secciones, puede necesitar establecer la altura del encabezado en cero (según el gusto de su / su cliente / gerente de proyecto)

Si tiene más secciones y no quiere meterse con los encabezados (incluso si solo se trata de una línea en el caso más simple), entonces debe establecer un UIView como pie de página, como se explicó en las respuestas anteriores.

Extensión de Swift 4.0

Solo una pequeña extensión para el guión gráfico:

enter image description here

 extension UITableView { @IBInspectable var hideSeparatorForEmptyCells: Bool { set { tableFooterView = newValue ? UIView() : nil } get { return tableFooterView == nil } } } 

UIKit no crea una celda vacía cuando tableView tiene un tableFooterView . Entonces podemos hacer un truco y asignar un objeto UIView altura cero como pie de página de tableView .

 tableView.tableFooterView = UIView() 

Swift 3 / Swift 4, forma muy fácil y sencilla

 override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) //MARK:- For Hiding the extra lines in table view. tableView?.tableFooterView = UIView() } 

O

 override func viewDidLoad(_ animated: Bool) { super.viewDidLoad(animated) //MARK:- For Hiding the extra lines in table view. tableView?.tableFooterView = UIView() }