Altura auto UITableViewCell basada en la cantidad de text UILabel

Tengo un poco de configuration complicada en mi storyboard, tengo un UIViewController que contiene un UITableViewController. Dentro del UITableViewController tengo varias celdas de prototypes que he vinculado a objects subclass uitableviewcell en código.

Usando restricciones y storyboard me gustaría cambiar la altura de mi celda prototipo dependiendo del tamaño que termine siendo UILabel, que depende del text que ingrese.

Actualmente tengo una

UIViewController -- UITableViewController -- -- UITableViewCell ((melchat) prototype cell) -- -- -- ContentView -- -- -- -- UIView ((background) view with drop shadow card type effect) -- -- -- -- -- UIImageView (Avatar) -- -- -- -- -- IUlabel (dynamic (depending on code/input) multi line UILabel) 

Algunos de cómo me gustaría que UILabel cambiara el tamaño de UIView (background) y luego, a su vez, afectara la altura de ese UITableViewCell.

Estoy usando XCode 8.2.1

He tomado una captura de pantalla del layout en el guión gráfico y las restricciones aplicadas … cualquier ayuda sería muy apreciada.

introduzca la descripción de la imagen aquí

** ACTUALIZACIÓN ******* He actualizado mis restricciones para que prácticamente todo vuelva a ContentView y haya actualizado el recuento de líneas de uilabel a 0 y luego también haya implementado el código UITableViewAutomaticDimension, pero aún no funciona. Vea el código y las capturas de pantalla a continuación.

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

introduzca la descripción de la imagen aquí

introduzca la descripción de la imagen aquí

Para ir un poco más lejos en la respuesta de Dao …

Él es correcto, necesita usar UITableViewAutomaticDimension

Además, debe asegurarse de configurar sus restricciones de forma que todo el contenido de la célula esté restringido a las celdas contentView. Entonces es probable que su label necesite restricciones tales como

  • Limitación líder a ImageView
  • Restricción superior a contentView
  • Constreñimiento inferior a contentView
  • Trailing constraint to contentView

Asegúrese de configurar el UILabel en líneas múltiples (o líneas = 0) y debería funcionar.

Si está utilizando las funciones de delegado heightForRowAt, asegúrese de devolver UITableViewAutomaticDimension

Utilice UITableViewAutomaticDimension

 tableView.rowHeight = UITableViewAutomaticDimension tableView.estimatedRowHeight = 300 

paso 1: proporcione la restricción a continuación a UIView que está dentro de la vista de contenido.

  • Constreñimiento principal a contentView
  • Restricción superior a contentView
  • Constreñimiento inferior a contentView
  • Trailing constraint to contentView

paso 2: otorga restricciones a IUlabel a continuación

  • Limitación líder a UIImageView
  • Restricción superior a UIView
  • Constreñimiento inferior a UIView
  • Constante de seguimiento a UIView

paso 3: luego select su restricción Trailing de IUlabel y select la opción de edición y luego select constante y select la opción greaterThanEqual.

paso 4: establecer el numberofline = 0 de línea numberofline = 0 la label numberofline = 0

paso 5: agregue este código a viewDidLoad()

 yourtableview.estimatedRowHeight = 80.0 yourtableview.rowHeight = UITableViewAutomaticDimension 

Después de rellenar el UILabel y aplicar restricciones, obtenga la altura de la label y configúrelo como la altura de UIView.

Después de esa llamada -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath y pasa la altura de UILabel / UIView para que obtenga la altura real de esa fila