Swift, UITableViewCell personalizado con UIImageView. Necesita cambiar el tamaño de la celda a la altura de la image.

Estoy tratando de hacer una aplicación, que mostrará imágenes en la vista de la tabla. Tengo celda personalizada con vista de image. Solo debe download los datos de image de la url:

@IBOutlet weak var tweetImage: UIImageView! var imageData : MediaItem? { didSet { updateUI() }} func updateUI(){ tweetImage.image = nil if let url = imageData?.url { if let data = NSData(contentsOfURL: url) { tweetImage.image = UIImage(data: data) } } } 

Necesito que la altura de la celda haya cambiado después de la descarga. Debe ser igual a la altura de la image. Configuré la dimensión automática en viewController:

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

Puse "ajuste de aspecto" en la image, obtengo resultados extraños. La image se extiende más allá de los límites de la celda. Quizás necesite establecer algunas restricciones … No lo sé.

Resultados:

resultado de ello

Pero necesito esto:

buen resultado

Si desea cargar imágenes asincrónicas:

Después de cargar y configurar un nuevo UIImage , puede recargar una celda específica mediante la function UITableView :

- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation

En tu UIViewController:

 override func viewDidLoad() { super.viewDidLoad() tableView.estimatedRowHeight = tableView.rowHeight tableView.rowHeight = UITableViewAutomaticDimension NSNotificationCenter.defaultCenter().addObserver(self, selector: "imageDidLoadNotification:", name:"CellDidLoadImageDidLoadNotification", object: nil) } func imageDidLoadNotification(notification: NSNotification) { if let cell = notification.object as? UITableViewCell let indexPath = tableView.indexPathForCell(cell) { tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.None) } } 

En tu UITableViewCell

 func updateUI(){ tweetImage.image = nil if let url = imageData?.url { if let data = NSData(contentsOfURL: url) { tweetImage.image = UIImage(data: data) NSNotificationCenter.defaultCenter().postNotificationName("CellDidLoadImageDidLoadNotification", object: self) } } } 

Si desea utilizar la tabla dinámica con UITableViewAutomaticDimension , debe establecer su restricción correctamente ( image ). (para el ancho y alto correctos, sugiero que use la relación de aspecto)

Con la vista de tabla estática, debe implementar optional func tableView(_ tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat , y contar manualmente el tamaño de celda.

Por supuesto, debe establecer restricciones para su image en la celda

captura de pantalla

Tal vez esta captura de pantalla te ayude