Hauteur d'une cellule dans une tableview

Rvb33Rvb33 Membre
06:09 modifié dans Vos applications #1
Bonjour,
Comment peut-on obtenir la hauteur d'une cellule (ligne)  dans une tableView ?
merci de votre aide

Réponses

  • muqaddarmuqaddar Administrateur
    06:09 modifié #2
    Précise ta demande s'il te plaà®t.

    Hauteur de toutes les cellules si ce sont les mêmes, hauteur d'une cellule en particulier (différente des autres) ?

    Si les cellules ont une hauteur différente, tu peux par exemple récupérer la cellule en question avec [tableView cellForRowAtIndexPath..], puis récupérer la frame de la cellule et enfin la hauteur.
  • Rvb33Rvb33 Membre
    06:09 modifié #3
    Merci mille fois
  • AliGatorAliGator Membre, Modérateur
    06:09 modifié #4
    En même temps, demander au modèle de demander à  la vue de demander la hauteur, alors que c'est le modèle qui a déjà  l'information et que c'est à  lui que la vue demande quelle doit être sa hauteur quand elle se dessine...

    Pourquoi ne pas directement demander au modèle vian heightForRowAtIndexPath ? (s'il est implémenté... ou sinon si c'est la même hauteur pour toutes les cellules, demander directement à  la tableview sa propriété rowHeight)...

    Bref, pourquoi faire compliué quand on peut faire simple (et poser des questions quand la réponse se trouve directement dans la doc) ?
  • muqaddarmuqaddar Administrateur
    06:09 modifié #5
    D'où ma première question.

    Mais il a l'air de vouloir récupérer la hauteur déjà  attribuée, par de vouloir la "setter" avec :
    tableView:heightForRowAtIndexPath:
  • AliGatorAliGator Membre, Modérateur
    06:09 modifié #6
    Heu ça change rien je comprend pas.

    Si tu implémentes [tt]tableView:heightForRowAtIndexPath:[/tt] pour retourner disons 50 pour un indexPath donné, quand la cellule va se dessiner, elle fera forcément 50pt de haut puisque c'est ce que tu lui demandes !
    Alors pourquoi aller ensuite dire au modèle de récupérer la cellule côté vue, puis demander à  cette dernière d'indiquer sa hauteur de 50... alors que c'est déjà  le modèle qui lui a dit qu'elle devait faire 50pt de haut !
    Evidemment c'est pareil si on implémente pas [tt]tableView:heightForRowAtIndexPath:[/tt] mais passe par [tt]tableView.rowHeight[/tt].


    En plus demander la cellule juste pour récupérer hauteur ça a de nombreux inconvénients :
    • appeler cellForRowAtIndexPath soi-même ça veut dire de récupérer toute la cellule et la construire en entier, ce qui peut vite être coûteux (ça va demander éventuellement d'allouer une nouvelle cell " voire de l'extraire d'un XIB " de positionner toutes les subviews, remplir la cellule avec des images et du texte venant du modèle, et tout un tas de choses comme ça que tu peux faire dans cette implémentation... tout ça pour récupérer la hauteur de la contentView seulement !
    • Tu pourrais demander alors aux visibleCells pour ne pas la réallouer et la remplir, mais si la cellule n'a pas encore été "laid out" à  l'écran ou que l'indexPath demandé ne fait pas partie des visibleCells, t'aurais une hauteur pas encore valide ou une cell nil
    • Au final ça fait demander beaucoup de choses et faire faire bcp de choses inutiles, tout ça pour récupérer une valeur... que t'as déjà  côté modèle !
    • Et de toute façon tout cela n'est pas dans la logique MVC ;)


    Je vois pas trop l'intérêt de se compliquer la vie plutôt que de demander au delegate... qui en plus est là  justement pour fournir ces infos !!
Connectez-vous ou Inscrivez-vous pour répondre.