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:
Mais j'ai besoin de ceci:
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
Peut-être que cette capture d'écran vous aidera