2017-08-29 4 views
0

Dans l'application que j'écris, j'ai décidé d'utiliser MVVM patter. Je lie ViewModels avec des vues en utilisant RxSwift + RxCocoa. Maintenant, je suis confronté à un problème que je ne trouve pas de solution moi-même.Recharger la ligne UITableView après le téléchargement de l'image (en utilisant MVVM)

J'ai une liste de ViewModels que je veux afficher dans UITableView. Dans tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) méthode je suis dequeueing une cellule et je lie un de ViewModels de la liste à cette cellule. ViewModel a imageUrl Variable et j'utilise Kingfisher pour télécharger cette image et la placer dans ImageView dans cette cellule.

Donc, voici mon problème maintenant: lorsque le téléchargement est terminé, je dois recharger cette ligne afin Auto Layout va calculer sa hauteur correcte. Mais quand j'utilise tableView.reloadRows(at: [indexPath], with: .none) la liaison est recréée et elle se termine par une boucle infinie (binding -> téléchargement de l'image download completion -> reload row -> binding -> ...)!

Des idées pour contourner ce problème?

+0

Partager le code s'il vous plaît! –

Répondre

0

Vous n'avez pas besoin de recharger la ligne pour autolayout pour calculer la hauteur (en fait, ne jamais le faire). Configurez votre tableview pour avoir la taille adaptative et vous avez fini.

Vous pouvez trouver un bon exemple sur https://www.raywenderlich.com/129059/self-sizing-table-view-cells

+0

Bonjour. Malheureusement, ce n'est pas vrai. Lorsque la ligne avec l'image est affichée et l'image téléchargée, rien ne se passe. Je dois faire défiler cette rangée de l'écran et le faire défiler à nouveau - alors l'image est correctement affichée. – Tiero

+0

@Tiero c'est vrai, j'ai un énorme projet avec une vue de collection affichant des images pour tous les éléments et nous ne rechargerons jamais la ligne. Si l'image ne s'affiche pas, cela signifie que votre code est incorrect. –

+0

Alors, comment contraignez-vous votre ImageView pour le faire fonctionner? – Tiero