working uitableviewcell not iphone ios uitableview autosize

iphone - uitableviewcell - uitableviewautomaticdimension not working



¿Cómo obtener un alto de fila UITableView para que se ajuste automáticamente al tamaño de UITableViewCell? (5)

A partir de iOS 8, tiene la opción de trabajar con celdas de auto-tamaño especificando estas opciones en su vista de tabla:

tableView.estimatedRowHeight = 85.0 tableView.rowHeight = UITableView.automaticDimension

Esto funcionará siempre que el sistema pueda calcular las filas en función de las restricciones o el contenido existentes. ¡Tenga cuidado de que si configura automaticDimension no se llamará heightForRowAtIndexPath!

Algunas veces, con datos más complejos, algunas celdas pueden calcularse automáticamente, pero otras necesitan una lógica de cálculo de altura específica. En este caso, solo debe configurar el valor estimadoRowHeight y luego implementar cellForRowAtIndexPath con lógica automática para las celdas que pueden funcionar correctamente:

// Set the estimated row height in viewDidLoad, but *not* automatic dimension! override func viewDidLoad() { // other viewDidLoad stuff... tableView.estimatedRowHeight = 85.0 tableView.delegate = self } // Then implement heightForRowAtIndexPath delegate method func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { if theAutomaticCalculationWorksForThisRow { return UITableView.automaticDimension } else { // Calculate row height based on custom logic... let rowHeight = 85.0 return rowHeight } }

¿Cómo obtener un alto de fila de UITableView para que se ajuste automáticamente al tamaño de UITableViewCell?

Asumiendo que estoy creando el UITableViewCell en Interface Builder, y su altura es mayor que el tamaño estándar, ¿cómo puedo hacer que la altura de la fila de UITableView se ajuste automáticamente? (es decir, en lugar de tener que medir manualmente la altura en el constructor de interfaces y luego programarlo)


En la xib con su vista de tabla, puede agregar un objeto de celda y vincularlo a un IBOutlet en su código fuente. No lo usarás en ningún lugar, solo usarás esto para obtener la altura de la celda.

Luego, en tableView:heightForRowAtIndexPath: puedes usar ese objeto para obtener la altura. No es 100% automático, pero al menos esto le ahorra la molestia de actualizar manualmente su código fuente cuando realiza cambios en la vista de celda en IB.

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return myDummyCellObject.bounds.size.height; }

Si todas las filas son del mismo tipo (celda), puede configurar la propiedad tableView.rowHeight programación en lugar de implementar el método de delegado anterior. Depende de tu escenario.

Ah, y asegúrate de no olvidar lanzar myDummyCellObject en -dealloc .


http://www.cimgf.com/2009/09/23/uitableviewcell-dynamic-height/ es un excelente tutorial para esto.

El bit principal es

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath; { // Get the text so we can measure it NSString *text = [items objectAtIndex:[indexPath row]]; // Get a CGSize for the width and, effectively, unlimited height CGSize constraint = CGSizeMake(CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), 20000.0f); // Get the size of the text given the CGSize we just made as a constraint CGSize size = [text sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap]; // Get the height of our measurement, with a minimum of 44 (standard cell size) CGFloat height = MAX(size.height, 44.0f); // return the height, with a bit of extra padding in return height + (CELL_CONTENT_MARGIN * 2); }


Si todas las celdas son iguales, establezca la propiedad UITableView en UITableView al tamaño de su celda. Si todos son diferentes según el contenido, tendrá que implementar -tableView:heightForRowAtIndexPath: y calcular la altura de cada fila según su origen de datos.


self.tableView.estimatedRowHeight = 65.0; // Estimate the height you want self.tableView.rowHeight = UITableViewAutomaticDimension; // auto change heights for multiple lines cells.

Al implementar el método requerido UITableViewDataSource:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath]; cell.textLabel.text = [self.todoArray objectAtIndex:indexPath.row]; cell.textLabel.numberOfLines = 0; // allow multiple lines showing up return cell; }