¿Cómo get UITableViewCell dentro de heightForRowAtIndexPath?

¿Cómo se obtiene el UITableViewCell cuando se encuentra dentro del método heightForRowAtIndexPath , es decir, dado el índicePath?

(entonces pude acceder a las vistas de contenido que he creado para agregar sus alturas)

 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { // How to get the UITableViewCell associated with this indexPath? } 

Gracias

EDITAR: De hecho, ¿hay realmente una forma válida de hacer esto? Cuando pongo algunas sentencias NSLog , parece que heightForRowAtIndexPath llamó varias veces antes de las llamadas a cellForRowAtIndexPath (que es donde configuré los UILabels en la celda)? Este tipo implica que se puede intentar usar una técnica que no funcione, es decir, esperaba que heightForRowAtIndexPath acceso a las tags ya creadas en cada celda para get sus alturas y agregarlas juntas para la altura total de la fila de celda, SIN EMBARGO si aún no se han configurado (dentro de cellForRowAtIndexPath ), ¿entonces creo que mi enfoque no puede funcionar realmente?

Para iOS8 :

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

O

 func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { return UITableViewAutomaticDimension } 

Pero para iOS7 , la key es calcular la altura después de la reproducción automática,

 func calculateHeightForConfigunetworkingSizingCell(cell: GSTableViewCell) -> CGFloat { cell.setNeedsLayout() cell.layoutIfNeeded() let height = cell.contentView.systemLayoutSizeFittingSize(UILayoutFittingExpandedSize).height + 1.0 return height } 

Nota:

1) Si hay tags de varias líneas, no olvide establecer el número de numberOfLines en 0.

2) No olvide label.prefernetworkingMaxLayoutWidth = CGRectGetWidth(tableView.bounds)

Puede usar el delegado de tableview en lugar de tableView en sí.

 id cell = [self tableView:tableView cellForRowAtIndexPath:indexPath]; 

Mira la respuesta aquí

ACTUALIZADO

En las nuevas versiones de iOS y el uso de restricciones automáticas correctas, no es necesario que hagas reference a la celda para calcular la altura de la celda.

Compruebe aquí

https://www.raywenderlich.com/129059/self-sizing-table-view-cells

Esta pregunta no tiene sentido porque en

 heightForRowAtIndexPath 

aún no se han creado celdas. Así es como funciona tableView:

  1. TableView le pregunta a su fuente de datos cuántas secciones tendrá. -numberOfSectionsInTableView
  2. Pregunta que es la fuente de datos cuántas filas tendrá cada sección (para saber qué tan grande debe ser el desplazamiento), -numberOfRowsInSection
  3. Pregunta que es la altura de delegado de cada fila visible . Para saber dónde se ubicarán las celdas. - heightForRowAtIndexPath
  4. Por último, pide fuente de datos para darle una celda para mostrar en la ruta de índice dada -cellForRowAtIndexPath

Por lo tanto, no puede acceder a las celdas desde heightForRowAtIndexPath porque aún no se ha creado una celda muy probable.


Sin embargo, en caso de que haya entendido mal su pregunta, intente:

 UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 

La respuesta obvia es llamar a cellForRowAtIndexPath , pero puede que ya hayas descubierto que hay algunos problemas con eso. Consulte esta pregunta si aún no lo ha hecho: UITableView flexible / dynamic heightForRowAtIndexPath

Para mi último proyecto utilicé una subclass personalizada de UICell e implementé un método como este. Entonces llamé a esto desde la table:heightForRowAtIndexPath: (después de search el contenido de esa fila).

 + (CGFloat) heightOfContent: (NSString *)content { CGFloat contentHeight = [content sizeWithFont: DefaultContentLabelFont constrainedToSize: CGSizeMake( DefaultCellSize.width, DefaultContentLabelHeight * DefaultContentLabelNumberOfLines ) lineBreakMode: UILineBreakModeWordWrap].height; return contentHeight + DefaultCellPaddingHeight; } 

Te sugeriría que table:heightForRowAtIndexPath: el alto correcto de una fila en la table:heightForRowAtIndexPath: usando tu estructura de datos (Altura de text, imágenes, text de multilínea, etc.).

Y cambie la altura del componente en su -(void) layoutSubviews método de vista de presentación.

Si desea acceder a las celdas, use tags. Pero como @Jhaliya ha dicho, es mejor calcular la altura en function del contenido de la celda. Si tienes en count la position de la celda, te sugiero que uses la vista de desplazamiento e implemente las celdas donde quieras.