UITextView sizeThatFits devuelve un tamaño diferente que boundingRectWithSize

Necesita la altura requerida de UITextView . sizeThatFits regresa más grande, pero la altura correcta que boundingRectWithSize . ¿Por qué la diferencia existe?

En dos lugares necesito saber la altura. En cellForRowAtIndexPath y en heightForRowAtIndexPath .

No creo que sea eficiente crear siempre un UITextView en heightForRowAtIndexPath solo para saber qué altura se requiere.

¿Qué solución sabes para calcular la altura de un UITextView en heightForRowAtIndexPath ?

Encontré un problema similar el mes pasado para UITableView, y utilizo boundingRectWithSize para calcular el tamaño, en realidad es correcto. Luego lo puse en UITextView.

Algunos errores que cometí:

  1. Me olvido de establecer el mismo tamaño de fuente al calcular y para UITextView
  2. UITextView tiene márgenes, lo agregaré manualmente en heightForRowAtIndexPath y estableceré textContainerInset en el mismo.

Espero que te ayude.

 -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { NSInteger section = indexPath.section; NSUInteger axisIndex = section - 2; yAxis *yAxisObj = self.yAxisInfoArray[axisIndex]; boundingRect = [yAxisObj.yAxisDescription boundingRectWithSize:CGSizeMake(self.descriptionViewWidth, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:self.contentFont} context:nil]; return boundingRect.size.height + TEXT_TOP_MARGIN + TEXT_BOTTOM_MARGIN; } -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *cellId = @"ChartDescriptionCell"; ChartDescriptionCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId]; if (!cell) { cell = [[ChartDescriptionCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId]; cell.textView.bounces = NO; cell.textView.showsHorizontalScrollIndicator = NO; cell.textView.showsVerticalScrollIndicator = NO; cell.textView.font = self.contentFont; cell.textView.textColor = [UIColor colorWithHex:@"#333333"]; cell.textView.textContainerInset = UIEdgeInsetsMake(TEXT_TOP_MARGIN, -5, TEXT_BOTTOM_MARGIN, -5); } NSInteger section = indexPath.section; NSUInteger axisIndex = section - 2; yAxis *yAxisObj = self.yAxisInfoArray[axisIndex]; cell.textView.text = yAxisObj.yAxisDescription; } return cell; } 

boundingRectWithSize devuelve tamaño para el text, por lo que debe proporcionar manualmente su fuente.

sizeThatFits devuelve el tamaño de UITextView con este text dentro

Si apunta a iOS 8 y superior, puede usar la altura de la celda dinámica, que es muy fácil. En el caso de iOS 7 necesitas alguna solución.

Tutorial: http://www.raywenderlich.com/87975/dynamic-table-view-cell-height-ios-8-swift

Pregunta relacionada con buena respuesta: Uso del layout automático en UITableView para layouts de celdas dinámicas y alturas de filas variables