Tengo un UITableViewController. Esta tabla vista tiene un encabezado de la vista.
Yo uso principal.guión gráfico con el diseño automático para configurar mi mando.

En mi main.storyboard, para w:Cualquier h:Ninguna, la vista previa de mi punto de vista controlador se establece con el tamaño predeterminado de 600×600. En el interior, mi cabecera está configurado para ver 600×200.

En mi encabezado de la vista, tengo un imageView conjunto el Aspecto de Relleno modo:

Cómo ajustar la altura de la cabecera de un formato tableview en swift?

Las restricciones :

Cómo ajustar la altura de la cabecera de un formato tableview en swift?

De los activos, de mi imagen ha 2x @y @3x tamaños.

Al compilar, en el simulador puedo obtener para el iPhone 5:

Cómo ajustar la altura de la cabecera de un formato tableview en swift?

Para el iPhone 6:

Cómo ajustar la altura de la cabecera de un formato tableview en swift?

Para el iPhone 6+:

Cómo ajustar la altura de la cabecera de un formato tableview en swift?

  • Para el iPhone 5, la imagen comienza por debajo de la barra de estado. Yo no
    entender por qué?
  • Para el iPhone 6 y el iPhone 6+, la imagen de los cultivos de la primera célula de mi vista de tabla. Y la parte superior de la imagen no se ajuste con la parte superior de la vista.

No sé cómo ajustar la altura de la tableHeaderView a la altura de mi imagen, porque esta altura depende del dispositivo.

He tratado de establecer mediante programación el marco de la cabecera, en vano:

 var frame:CGRect!
 frame.size.width = self.bgHeaderImageView.image?.size.width
 frame.size.height = self.bgHeaderImageView.image?.size.height
 self.tableView.tableHeaderView?.frame = frame

Tengo 2 errores : «el Valor de tipo opcional CGFloat? no envueltos»

Y si puedo corregir con

 var frame:CGRect!
 frame.size.width = self.bgHeaderImageView.image?.size.width!
 frame.size.height = self.bgHeaderImageView.image?.size.height!
 self.tableView.tableHeaderView?.frame = frame

Tengo 2 errores : «el Operando de postfix ! debe tener opcional de tipo»

Es posible ajustar el tamaño en el guión gráfico directamente y no mediante programación ?

Probablemente estoy perdiendo algo aquí…

OriginalEl autor cmii | 2015-03-21

3 Comentarios

  1. 3

    He encontrado una solución, no muy limpio, pero funciona.

      var kTableHeaderHeight:CGFloat! //expected height of the header tableview
    
      var image: UIImage = UIImage(named: "my-image")!
    
      var frame:CGRect!=self.tableView.tableHeaderView?.frame
      if UIScreen.mainScreen().bounds.size.width <= 320 { //iPhone 5 and less
          frame.size.width = 320
          frame.size.height = 212
       } else { //iPhone 6 @2x and iPhone 6+ @3x
          frame.size.width = image.size.width
          frame.size.height = image.size.height
       }
       self.tableView.tableHeaderView?.frame = frame
    gracias por compartir tu solución! usted me ayudó con un problema similar, que quiero compartir solo en caso de que alguien más experimentado: en lugar de un uiimageView como fondo tengo un uisearchbar y uibuttons y la altura de la tableHeaderView (y tableFooterView así) iba a ser grandes y se extienden por toda la altura de la pantalla. No podía creer que no había ninguna posibilidad en el Interface Builder para arreglar eso, o que este error se produjo en el primer lugar – esto me parece un error en el SDK y establecer el marco explícitamente en viewDidLoad resuelto. (iOS 8.2 & XCode 6.2 & OS X 10.9.5)
    esto es terrible.

    OriginalEl autor cmii

  2. 3

    La UITableView tableHeaderView no tiene la opción de relación de aspecto y el diseño automático de uso de la tableHeaderView es limitada en InterfaceBuilder. Hay muchas maneras de lograr una dinámica altura de la tableHeaderView. Si usted quiere tener un tableHeaderView altura basada en la proporción de una imagen de cabecera puede utilizar:

    let width = UIScreen.mainScreen().bounds.size.width
    self.height = (width/640) * 209 //calculate new height
    self.tableView.tableHeaderView?.frame.size = CGSize(width: self.tableView.tableHeaderView!.frame.size.width, height: self.height)

    OriginalEl autor Melvin

  3. 0

    Probar este

        self.edgesForExtendedLayout = UIRectEdge.None
        self.automaticallyAdjustsScrollViewInsets = false
        self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0)

    Y esto también

    func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        if section == 0
        {
            return 1
        }
        else
        {
            return 40; //your other headers height value
        }
    }
    
    func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        if section == 0
        {
            //Note CGFloat.min for swift
            //For Objective-c CGFLOAT_MIN
            let headerView = UIView.init(frame: CGRectMake(0.0, 0.0, self.tableView.bounds.size.width, CGFloat.min))
            return headerView
        }
        else
        { 
            //Construct your other headers here 
            return UIView()
        }
    }

    OriginalEl autor Cloy

Dejar respuesta

Please enter your comment!
Please enter your name here