Problemas de desplazamiento de celda auto dimensionable de UITableView con gran diferencia de altura de celda

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{ let json = JSON(data: activityTableView.onlineFeedsData)[indexPath.row] // new if(json["topic"]["reply_count"].int > 0){ if let cell: FeedQuestionAnswerTableViewCell = tableView.dequeueReusableCellWithIdentifier(kCellIdentifier_reply) as? FeedQuestionAnswerTableViewCell{ cell.selectionStyle = .None cell.tag = indexPath.row cell.relatedTableView = self.activityTableView cell.configureFeedWithReplyCell(cell, indexPath: indexPath, rect: view.frame,key: "activityTableView") // Make sure the constraints have been added to this cell, since it may have just been created from scratch cell.layer.shouldRasterize = true cell.layer.rasterizationScale = UIScreen.mainScreen().scale return cell } }else{ if let cell: FeedQuestionTableViewCell = tableView.dequeueReusableCellWithIdentifier(kCellIdentifier) as? FeedQuestionTableViewCell{ cell.selectionStyle = .None cell.tag = indexPath.row cell.relatedTableView = self.activityTableView cell.configureFeedCell(cell, indexPath: indexPath, rect: view.frame) // Make sure the constraints have been added to this cell, since it may have just been created from scratch cell.layer.shouldRasterize = true cell.layer.rasterizationScale = UIScreen.mainScreen().scale return cell } } return UITableViewCell() } 

Hay una diferencia de 200-400 en altura en cada celda, así que intenté implementar el cálculo de altura en estimatedHeightForRowAtIndexPath . No puedo calcular la altura exacta de este método como bcz de cálculo

y almacenando en caching la altura en el método willDisplayCell , pero el salto sigue willDisplayCell como si willDisplayCell en renderizar.

La celda es como el layout de tipo de tarjeta de Facebook con muchos datos dynamics con text e imágenes de altura variable. ¿Puede alguien ayudarme en esto? Gracias

Si puede calcular la altura de cada celda, simplemente use la propiedad tableView (_: heightForRowAtIndexPath) en lugar de la propiedad estimatedRowHeightAtIndexPath. estimatedRowHeightAtIndexPath se utiliza principalmente en células de tamaño natural como células autoadhesivas, etc.

Prueba esta. Espero que esto pueda ayudarte. Ha funcionado para mi En realidad, esto calcula la altura de la celda antes de que se muestre. Gracias.

 NSMutableDictionary *cellHeightsDictionary; 

// Coloca esto en viewDidLoad

 cellHeightsDictionary = @{}.mutableCopy; 

// Métodos delegates de UITableview

 - (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(7_0) { NSNumber *height = [cellHeightsDictionary objectForKey:indexPath]; if (height) return height.doubleValue; return UITableViewAutomaticDimension; } -(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { [cellHeightsDictionary setObject:@(cell.frame.size.height) forKey:indexPath]; }