UITiftViewCell personnalisé et rapide avec UIImageView. Besoin de resize la cellule à la hauteur de l'image

J'essaye de faire l'application, qui montrera des images dans la vue de tableau. J'ai une cellule personnalisée avec vue d'image. Il doit seulement download datatables d'image de l'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) } } } 

J'ai besoin de changer la hauteur de la cellule après le téléchargement. Il doit être égal à la hauteur de l'image. Je définis la dimension automatique dans viewController:

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

J'ai mis "l'ajustement d'aspect" à l'image, j'obtiens des résultats étranges. L'image s'étend au-delà des limites de la cellule. Peut-être que je dois définir certaines contraintes … Je ne sais pas.

Résultats:

résultat de celui-ci

Mais j'ai besoin de ceci:

joli résultat

Si vous voulez charger des images asynchronouss:

Après avoir chargé et défini le nouveau UIImage , vous pouvez recharger une cellule spécifique via la fonction UITableView :

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

Dans votre 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) } } 

Dans votre 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 vous souhaitez utiliser la table UITableViewAutomaticDimension avec UITableViewAutomaticDimension , vous devez définir correctement votre contrainte ( image ). (pour la largeur et la hauteur correctes, je vous suggère d'utiliser le rapport d'aspect)

Avec la vue de table statique, vous devez implémenter optional func tableView(_ tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat , et countz la taille de la cellule manuellement.

Bien sûr, vous devez définir des contraintes pour votre image dans la cellule

capture d'écran

Peut-être que cette capture d'écran vous aidera