[iOS8] Autosize d'une cell avec une UIImageView
Paisible.fr
Membre
Bonjour,
J'ai un projet avec une UITableView sous iOS 8.
La table est constituée d'une premiere cellule avec une image et les cellules suivantes sont du texte.
Chaque cellule à sa propre hauteur le texte contenu étant plus ou moins long.
Pour le texte aucun problème le mécanisme d'autoresize d'iOS 8 fonctionne parfaitement. (une custom cell avec un UILabel à l'intérieur et les contraintes nécessaire dessus)
Par contre impossible de faire de même pour la cellule d'image. Elle reste toujours à self.tableView.estimatedRowHeight = 44;
Un exemple ? une idée ? une suggestion ?
Merci d'avance.
Mots clés:
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Deriver une classe de UIImageView et override intrinsicContentSize pour renvoyer la taille de l'image ?
Implémenter heightForRowAtIndexPath ?
@Joanna : wouah rien que cela ? Hum c'est une idée cette mais normalement il devrait y avoir plus simple.
Une simple contrainte sur la hauteur de l'UIImageView devrait suffire à avoir la cellule de la bonne hauteur. Mais apparemment non.
Je cherche...
J'ai un projet de démonstration sur autosizing des cellules. Si tu voulais, je pourrais te l'envoyer ?
Utiliser les contraintes pour gérer l'estimatedHeight et la height c'est loin d'être le plus optimisé en terme de perfs. Pour ce genre de cas je déconseille. Ca appelle le moteur de layout toutes les demi-secondes à chaque scroll juste pour estimer la taille et calculer les tailles des scrollbars, c'est un peu violent !
Ca c'est ce qu'on faisait "avant".
Là j'utilise iOS8 et le "Self Sizing table rows" basés sur l'autolayout.
Cf :
Ca fonctionne parfaitement pour toutes mes cellules de type texte.
Une CustomCell avec un UILabel avec NumberOfLine à 0 et les contraintes qui vont bien.
Mais impossible de faire la même chose avec ma première cellule qui contient une image.
Je ne sais pas ce que cela vaut en terme de performance. Je vais te faire 100% confiance là -dessus car tu semble largement plus compétent que moi.
Cependant si tu relit la session 226 de la WWDC 2014 c'est quand même clairement indiqué que le heightForRowAtIndexPath fait parti du passé. Et comme mon app est iOS 8 donc autant en "profiter".
Oui je veux bien. Merci.
Je l'enverrai ce soir quand j'ai plus qu'un iPhone
@joanna : merci je vais essayer de regarder cela dès que possible.
Pas d'autres idées ? pistes ?
Pas testé à fond mais il semblerais que le simple bout de code suivant suffise :
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
if(indexPath.row == 0 && indexPath.section == 0) {
return 150.0;
}
return UITableViewAutomaticDimension;
}
Sous réserve de tests plus approfondis (rotation, scrolling, taille de l'écran, etc...) cela semble répondre à mon besoin.
Hum j'avais pas compris cela.
Je pensais que tu voulais que je revienne à l'ancienne méthode et calculer la hauteur de toutes les cellules pour des questions de performances.
Par contre j'ai un "effet de bord" ou un "bug" mon image n'est pas visible de suite. Mais ça doit être un problème dans mon code.