UITableViewCell, UITextView con altura dinámica

Necesito hacer una UITableViewCell que contenga mucho text. Sé que puedo agregar una UITextView a mi celda, pero cada input no tendrá la misma cantidad de text.

Sé que puedo controlar la altura de UITableViewCell con: -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath , pero eso no es realmente lo que estoy buscando.

Escenario 1:

  --------------- | First Cell | --------------- --------------- | Second Cell | | with some | | text. | --------------- --------------- | Third Cell | --------------- 

Escenario 2:

  --------------- | First Cell | --------------- --------------- | Second Cell | | with some | | more text and | | an unknown | | cell height. | --------------- --------------- | Third Cell | --------------- 

Use UILabel para el text de su celda. A continuación, puede usar sizeWithFont:constrainedToSize: para calcular la altura de esa UILabel dentro de cada celda. Por ejemplo:

 #define PADDING 10.0f - (CGFloat)tableView:(UITableView *)t heightForRowAtIndexPath:(NSIndexPath *)indexPath { NSString *text = [self.items objectAtIndex:indexPath.row]; CGSize textSize = [text sizeWithFont:[UIFont systemFontOfSize:14.0f] constrainedToSize:CGSizeMake(self.tableView.frame.size.width - PADDING * 3, 1000.0f)]; return textSize.height + PADDING * 3; } 

Es algo complicado, ya que involucra cosas como el contenido de la vista de text que tendrás que tener en count al calcular el tamaño de los texts. He escrito mis aprendizajes y la solución para calcular la altura de UITableViewCell en base a un UITextView interno en mi blog. La publicación contiene el código que funciona para las aplicaciones universales, tanto en los styles de vista de tabla como en la autorotation.

La solución es bastante simple y debería funcionar desde iOS 7. Asegúrese de que la opción Scrolling Enabled esté desactivada para UITextView dentro de UITableViewCell en StoryBoard.

Luego, en la vista viewDidLoad () de UITableViewController establezca tableView.rowHeight = UITableViewAutomaticDimension y tableView.estimatedRowHeight > 0 , como por ejemplo:

 override func viewDidLoad() { super.viewDidLoad() tableView.rowHeight = UITableViewAutomaticDimension tableView.estimatedRowHeight = 44.0 } 

Eso es. La altura de UITableViewCell se ajustará automáticamente en function de la UITextView interna de UITextView .