es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué hay tanto espacio entre el encabezado de mi TableView y el título grande de los controladores de navegación?

Hay mucho espacio entre los encabezados de mi sección TableView y el título grande de mis Navigation Controllers. Estoy haciendo EXACTAMENTE lo mismo para los dos controladores y aún hay una diferencia.

Ya he intentado mucho pero no he encontrado una solución. Lo que he intentado hasta ahora es:

  • Desmarcar – Ajustar las inserciones de la vista de desplazamiento.
  • tableView.contentInsetAdjustmentBehavior = .never
  • La configuración de los encabezados es la misma con un switch case.
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Posible solución para el problema de espaciado entre los encabezados de sección de una TableView y el título grande de un controlador de navegación:

    Una posible solución es establecer el tableHeaderView de la UITableView como una UIView con una altura igual a la altura del título grande (que es 52 puntos por defecto). Esto alineará la parte superior de la tabla con la parte inferior del título grande y eliminará el espacio extra entre ellos.

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
    
        if #available(iOS 11.0, *) {
            let headerView = UIView(frame: CGRect(x: 0, y: 0, width: tableView.bounds.size.width, height: navigationController?.navigationBar.bounds.size.height ?? 0))
            headerView.backgroundColor = .clear
            tableView.tableHeaderView = headerView
        } else {
            tableView.contentInset = UIEdgeInsets(top: -(navigationController?.navigationBar.bounds.size.height ?? 0), left: 0, bottom: 0, right: 0)
        }
    }
    

    Alternativamente, si deseas mantener el comportamiento predeterminado del encabezado de la tabla, puedes ajustar el contentInset de la tabla según la altura del título grande. Puedes hacer esto subclasificando UITableViewController y sobrescribiendo el método viewDidLayoutSubviews().

    class MyTableViewController: UITableViewController {
    
        override func viewDidLayoutSubviews() {
            super.viewDidLayoutSubviews()
    
            if #available(iOS 11.0, *) {
                let largeTitleHeight = navigationController?.navigationBar.bounds.size.height ?? 0
                tableView.contentInset = UIEdgeInsets(top: largeTitleHeight, left: 0, bottom: 0, right: 0)
                tableView.scrollIndicatorInsets = UIEdgeInsets(top: largeTitleHeight, left: 0, bottom: 0, right: 0)
            }
        }
    
        // ...
    }
    

    Al ajustar el contentInset de la tabla, los encabezados de sección estarán posicionados más cerca del título grande, lo que creará un diseño más consistente entre los dos controladores.

Comments are closed.