¿Por qué aparecen las vistas del encabezado de la sección de vista de tabla sobre la vista del encabezado de la tabla?

Tengo un UITableViewController cuyo encabezado hice 'estático' o 'flotante' a través del siguiente código:

 //MARK: Scroll view functions override func scrollViewDidScroll(scrollView: UIScrollView) { //Makes sure the header does not scroll with the table view var headerRect = CGRect(x: 0, y: -kTableHeaderHeight, width: tableView.bounds.width, height: kTableHeaderHeight) headerRect.origin.y = tableView.contentOffset.y headerView.frame = headerRect } 

y que configuré de la siguiente manera en viewDidLoad() :

 override func viewDidLoad() { kTableHeaderHeight = self.view.frame.height/3 headerView = tableView.tableHeaderView tableView.tableHeaderView = nil self.view.addSubview(headerView) tableView.contentInset = UIEdgeInsets(top: kTableHeaderHeight, left: 0, bottom: 0, right: 0) tableView.contentOffset = CGPoint(x: 0, y: -kTableHeaderHeight) } 

Por alguna razón, desplazar la vista de la tabla hace que los encabezados de la sección de vista de tabla aparezcan sobre la vista de la tabla al desplazarse. ¿Hay alguna manera de detener este comportamiento?

A continuación, se muestra el encabezado de vista de tabla en gris claro y los encabezados de sección en gris oscuro. ¿No debería la sección 0 estar 'atrás' del encabezado de vista de tabla? ¿Cómo puedo conseguir esto?

introduzca la descripción de la imagen aquí También he proporcionado el código completo a continuación: importar UIKit

 class TableViewController: UITableViewController { private var kTableHeaderHeight: CGFloat = CGFloat() var headerView: UIView! // Setting up the table header view override func viewDidLoad() { super.viewDidLoad() initialSetup() } //MARK: Table view functions override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("eCell")! as UITableViewCell return cell } override func numberOfSectionsInTableView(tableView: UITableView) -> Int { return 5 } override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 3 } override func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) { // Adding table view header separator let header: UITableViewHeaderFooterView = view as! UITableViewHeaderFooterView header.contentView.backgroundColor = UIColor(networking: 38/255, green: 38/255, blue: 38/255, alpha:1) //38 header.textLabel?.font = UIFont.prefernetworkingFontForTextStyle(UIFontTextStyleCaption1) //headline // Adding cell separator let separator = UIView(frame: CGRectMake(15, 0, self.view.frame.width,1)) separator.backgroundColor = UIColor(networking: 57/255, green: 57/255, blue: 57/255, alpha: 1) header.addSubview(separator) header.textLabel!.textColor = UIColor(networking: 131/255, green: 131/255, blue: 131/255, alpha: 1) self.tableView.sendSubviewToBack(view) } override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? { return "Section " + String(section) } //MARK: Scroll view functions override func scrollViewDidScroll(scrollView: UIScrollView) { updateHeaderView() } //MARK: Private Functions func initialSetup() { kTableHeaderHeight = self.view.frame.height/3 headerView = tableView.tableHeaderView tableView.tableHeaderView = nil self.view.addSubview(headerView) tableView.contentInset = UIEdgeInsets(top: kTableHeaderHeight, left: 0, bottom: 0, right: 0) tableView.contentOffset = CGPoint(x: 0, y: -kTableHeaderHeight) } func updateHeaderView() { //Makes sure the header does not scroll with the table view var headerRect = CGRect(x: 0, y: -kTableHeaderHeight, width: tableView.bounds.width, height: kTableHeaderHeight) headerRect.origin.y = tableView.contentOffset.y headerView.frame = headerRect } 

}

Así que finalmente lo descubrí y estoy algo avergonzado de que no pensé en esto antes. De todos modos, agregando el siguiente código lo solucionó:

 override func viewWillLayoutSubviews() { super.viewWillLayoutSubviews() self.tableView.bringSubviewToFront(headerView) }