¿Cómo hacer que la altura de UITableView sea dinámica con la function de reproducción automática?

Estoy usando autolayout en Xcode 5.

Puse la altura de la vista de la tabla en mayor o igual a 200px. Quiero que tenga tamaño dynamic. Porque a veces tendrá muchas filas, a veces tendrá algunas filas.

Pero el tamaño es siempre 200px. Y si el contenido es mayor que eso, debería desplazarme hacia abajo para ver las filas inferiores.

¿Qué debo hacer para dar el tamaño dynamic de tableview? introduzca la descripción de la imagen aquí

Esto se testing con la última versión de Xcode.

1) En Xcode, vaya al guión gráfico y click la vista de la tabla para seleccionarlo.

2) En el panel Utilidades (ver image 1), asegúrese de que la restricción para la altura de la vista de la tabla esté definida.

Restricción de altura de vista de tabla

3) En el controller de vista que muestra la vista de tabla, cree una salida a esta restricción:

En Swift 3

@IBOutlet weak var dynamicTVHeight: NSLayoutConstraint! 

En el objective C

 @property (strong, nonatomic) IBOutlet NSLayoutConstraint *dynamicTVHeight; 

4) En el guión gráfico, vuelva a la restricción de altura para UITableView y verifique que el icono de la derecha haya cambiado el color del violeta al azul (consulte la image 2)

Tabla de restricciones de longitud de vista después de la salida

4) También coloque este código en el mismo controller de vista:

Rápido

 override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) tableView.reloadData() } override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() let height = min(self.view.bounds.size.height, tableView.contentSize.height) dynamicTVHeight.constant = height self.view.layoutIfNeeded() } 

C objective

 - (void)viewWillAppear:(BOOL)animated { // just add this line to the end of this method or create it if it does not exist [self.tableView reloadData]; } -(void)viewDidLayoutSubviews { CGFloat height = MIN(self.view.bounds.size.height, self.tableView.contentSize.height); self.dynamicTVHeight.constant = height; [self.view layoutIfNeeded]; } 

Esto debería solucionar tu problema.

Estos son los enlaces a dos versiones del proyecto de ejemplo que hace lo que desea, una para Objective C y la otra para Swift 3. Descárguela y pruébela con Xcode. Ambos proyectos funcionan con la última versión de Xcode, Xcode 8.3.2.

https://github.com/jcatalan007/TestTableviewAutolayout https://github.com/jcatalan007/TestTableviewAutolayoutSwift

Crea tu celda por xib o storyboard. dale los contenidos de su salida. ahora llámalo en CellForRowAtIndexPath. p.ej. si desea establecer la altura de la celda según el text de la label del comentario. introduzca la descripción de la imagen aquí

por lo tanto, establezca los comentariosLbl.numberOfLine = 0;

luego en ViewDidLoad

  self.table.estimatedRowHeight = 44.0 ; self.table.rowHeight = UITableViewAutomaticDimension; 

y ahora

 -(float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ return UITableViewAutomaticDimension;} 

voila … lo hiciste …

Se puede hacer programáticamente. El concepto (y el código en sí) es realmente muy simple:

En el método updateConstraints de la supervisión de myTableView, agregue una restricción para que la altura de myTableView sea igual a myTableView.contentSize.height.

Probado en Xcode 6 para iOS 7.

Puede Ctrl + Arrastre la restricción de altura de su UITableView en el código fuente del controller de vista y asígnele un nombre. Entonces, en updateViewConstraints de su ViewController puede establecer la constante de esa restricción en tableView.contentSize.height

….

 @IBOutlet weak var tableViewHeightConstraint: NSLayoutConstraint? 

….

 override func updateViewConstraints() { super.updateViewConstraints() tableViewHeightConstraint?.constant = tableView.contentSize.height }