when valid uitableviewcontroller only are apple ios uitableview interface-builder uistoryboard

ios - valid - ¿Cómo establecer la altura automática de la celda estática en UITableViewController?



static table views are only valid when embedded in uitableviewcontroller instances (8)

¡Asegúrese de anular heightForRowAtIndexPath! De lo contrario no se mostrará correctamente de mis experiencias.

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { return UITableViewAutomaticDimension }

Estoy utilizando IB y storyboard y UITableViewController . Allí definí tres celdas estáticas . Los dos primeros deben tener una altura determinada, pero el último debe llenar automáticamente el espacio restante (anclar a la parte inferior de la vista). ¿Cómo puedo conseguir esto? Puedo usar autolayout para los controles dentro de la celda, pero está atenuado para la celda en sí.

La mejor solución sería hacer esto desde IB, pero las soluciones programáticas también son bienvenidas.

EDITAR:

Así es como se ve en mi guión gráfico (los colores son para visualizar controles separados, cada control ha requerido restricciones):

Y después de lanzar: Tenga en cuenta que la vista de texto termina debajo de la parte inferior de la pantalla.

Olvidé mencionar que me dirijo a iOS 7.0+.


Cubrí esto en una publicación de blog usando una vista de tabla estática y configurando las alturas de las celdas usando el diseño automático. Todas las celdas están definidas en el constructor de interfaces.

Debe habilitar las alturas de celdas automáticas en el código, pero eso es solo un par de líneas.

Muestro todo incluyendo el IB y el código.

Echar un vistazo

http://www.oliverfoggin.com/using-a-static-uitableview-as-a-layout-device/


La respuesta de Ryan Romanchuk es genial. Tengo un consejo que puede ayudar a un principiante como yo.

Dado que este es un caso de celda estática, es posible que esté inclinado a usar IBOutlet para cada campo dinámico. La configuración de valores en, por ejemplo, UILabel fuera del ciclo de carga de tableView no tendrá en cuenta la nueva altura.

Para permitir que la altura dinámica funcione, puede asignar valores en el delegado cellForRowAtIndexPath reemplazado para que el autolayout pueda recoger la nueva altura. Llame a tableView.reloadData() cuando desee actualizar los campos.


No estoy seguro de IB y utilizando el Autolayout

Pero usando programáticamente,

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

Usando este método u puede verificar el indexpath.row. Y utilizando esta vuelta las diferentes alturas.


Ok prueba esto

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat{ if indexPath.row == 0 { return firstRowHeight } else if indexPath.row == 1 { return secondRowHeight } else { return tableView.frame.size.height - firstRowHeight - secondRowHeight } }

Lo único que puede ser un problema es que este método se ejecutará antes de que la vista establezca la altura de tableView


Para la altura estática (no controlada por datos), solo puede quitar la cola de la celda una vez y almacenar la altura:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { static NSNumber *height; if (!height) { UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"MyCustomCell"]; height = @(cell.bounds.size.height); } return [height floatValue]; }


Realmente puedes usar UITableViewAutomaticDimension con celdas estáticas. Diseñe sus celdas estáticas según lo usual y configure manualmente sus celdas como alturas dinámicas agregando

tableView.rowHeight = UITableViewAutomaticDimension tableView.estimatedRowHeight = 240 // Something reasonable to help ios render your cells

Ahora anule el delegado de heightForRow

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { return UITableViewAutomaticDimension }

La única otra advertencia que noté con esta técnica es que debe usar NSAutolayout para crear una restricción al contenedor inferior (el contenedor de UITableViewCell ). Entonces, supongamos que tiene un contenedor dentro del contentView de la celda que tendrá una altura dinámica, para que esto se represente correctamente, necesita crear una restricción de espacio inferior.

Si tiene algunas celdas estáticas que tienen alturas fijas, recomiendo devolver ese tamaño activando la fila en tableView:heightForRowAtIndexPath:indexPath


Si toda la altura de la celda de Tableview es dinámica, entonces puedes probar esto

tableView.rowHeight = UITableViewAutomaticDimension tableView.estimatedRowHeight = 240

o una vista de tabla necesita algunas celdas de altura fija y algunas celdas de altura dinámica. Puede verificar la respuesta. Altura de celda de tabla de tabla dinámica y estática

Espero eso ayude.