¿Por qué los encabezados y pies de página siguen el movimiento de la fila al eliminarlo?

Estoy construyendo una aplicación en Swift que depende en gran medida de las vistas de tabla. Utiliza encabezados y pies de página, así como eliminación de filas. Por alguna extraña razón cuando realizo una eliminación de fila, el encabezado y el pie de página siguen el movimiento deslizante de la fila que se va a eliminar. Las siguientes capturas de pantalla explican lo que quiero decir.

introduzca la descripción de la imagen aquí

¿Cómo evitas esto?

Estoy implementando la function de eliminación así:

// Deleting override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { if editingStyle == .Delete { // Handling data source updating, cell row deletion, transition... } } 

Y el encabezado y el pie de página así:

 // ## Header ## override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { let headerCell = tableView.dequeueReusableCellWithIdentifier("shoppingHeader") as! ShoppingTableViewHeaderCell // Clear up startup background headerCell.textLabel?.backgroundColor = UIColor.clearColor() // Add covering background color headerCell.backgroundColor = UIColorFromHex(0x22b8a3, alpha: 1) // Set store image, or store title if image is unavailable let url = NSURL(string: dataSource[sortedStores[section]]["meta_data"]["logo"].string!) let data = NSData(contentsOfURL: url!) if data != nil { // Store image let image = UIImage(data: data!) headerCell.imageView?.image = imageResize(image: image!, cellWidth: 90, cellHeight: 30) } else { // Store name label headerCell.textLabel?.text = dataSource[sortedStores[section]]["meta_data"]["nameStore"].string headerCell.textLabel?.font = UIFont(name: "HelveticaNeue-Light", size: 16) headerCell.textLabel?.textColor = UIColor.whiteColor() } // Right hand side details: define strings let address = dataSource[sortedStores[section]]["meta_data"]["street"].string let distanceMeasure = dataSource[sortedStores[section]]["meta_data"]["distance"].int! let numberOfOffers = dataSource[sortedStores[section]]["offers"].count // Right hand side details: assign strings to variables headerCell.rightLabel0.text = address headerCell.rightLabel1.text = "\(distanceMeasure) m away" if numberOfOffers == 1 { headerCell.rightLabel2.text = "1 offer available" } else { headerCell.rightLabel2.text = "\(numberOfOffers) offers available" } // Right hand side details: set text color headerCell.rightLabel0.textColor = UIColor.whiteColor() headerCell.rightLabel1.textColor = UIColor.whiteColor() headerCell.rightLabel2.textColor = UIColor.whiteColor() return headerCell } // ## Footer ## override func tableView(tableView: UITableView, viewForFooterInSection section: Int) -> UIView? { let footerCell = tableView.dequeueReusableCellWithIdentifier("shoppingFooter") as! UITableViewCell // Set black color to show that footer moves too. footerCell.backgroundColor = UIColor.blackColor() //clearColor() return footerCell } 

Creo que el uso de celdas reutilizables para encabezados y pies de página es su problema. Intenta utilizar nibs en su lugar. Cree files separados .xib para las celdas del encabezado y pie de página. Y consigue tu celular con:

 let headerCell = NSBundle.mainBundle().loadNibNamed("YourNibName", owner: self, options: nil).first as! ShoppingTableViewHeaderCell 

O implemente una subclass UITableViewHeaderFooterView, cree una punta para ello, registre esta punta con:

  tableView .registerNib(UINib(nibName:"YourNibName", bundle: nil), forHeaderFooterViewReuseIdentifier: "TableHeader") 

Y obtenga la vista de su encabezado con:

 let header = tableView.dequeueReusableHeaderFooterViewWithIdentifier("TableHeader") 

Simplemente devuelva headerCell.contentView lugar de headerCell y su problema se resolverá.