[iOS8] Autosize d'une cell avec une UIImageView

Paisible.frPaisible.fr Membre
septembre 2014 modifié dans Dev. iOS, watchOS, tvOS #1

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.


Réponses

  • Joanna CarterJoanna Carter Membre, Modérateur

    Deriver une classe de UIImageView et override intrinsicContentSize pour renvoyer la taille de l'image ?


  • AliGatorAliGator Membre, Modérateur

    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...


  • Joanna CarterJoanna Carter Membre, Modérateur
    septembre 2014 modifié #5


    Implémenter heightForRowAtIndexPath ?

    Bah, ça c'est vachement d'hier ;)
  • Joanna CarterJoanna Carter Membre, Modérateur

    @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 ?
  • AliGatorAliGator Membre, Modérateur

    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 !


  • Paisible.frPaisible.fr Membre
    septembre 2014 modifié #8


    Implémenter heightForRowAtIndexPath ?




     


    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.


     

    Maintenant je doute que mixer les deux méthodes soit très opportun et cela m'étonnerais fort que cela fonctionne.



  • 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 !




    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".



  • J'ai un projet de démonstration sur autosizing des cellules. Si tu voulais, je pourrais te l'envoyer ?




    Oui je veux bien. Merci.

  • Joanna CarterJoanna Carter Membre, Modérateur

    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.


  • AliGatorAliGator Membre, Modérateur
    Bah oui c'est ce que je disais ^^


  • Bah oui c'est ce que je disais ^^




    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.

Connectez-vous ou Inscrivez-vous pour répondre.