Comment obtient-on le UITableViewCell
quand dans la méthode heightForRowAtIndexPath
, c'est-à-dire compte tenu de l'index?
(Ensuite, j'aurais pu accéder aux vues de contenu que j'ai créées pour ajouter leurs hauteurs)
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
// How to get the UITableViewCell associated with this indexPath?
}
merci
EDIT: En fait, y a-t-il vraiment un moyen valide de faire cela? Quand je mettais quelques NSLog
déclarations, il semble que heightForRowAtIndexPath
il a appelé plusieurs fois avant les appels sur cellForRowAtIndexPath
(qui est là où je configurais le UILabels
dans le cellule)? Ce type implique que je puisse être essayé d'utiliser une technique qui ne fonctionnera pas, c'est-à-dire que j'espérais entrer heightForRowAtIndexPath
pour accéder aux étiquettes déjà créées dans chaque cellule pour obtenir leur sommet et les ajouter à la rangée globale de la cellule Taille, cependant, s'ils n'ont pas encore été mis en place (dans cellForRowAtIndexPath
) alors je suppose que mon approche ne peut pas vraiment fonctionner?
Vous pouvez utiliser le délégué de la TableView au lieu de la TableView elle-même.
id cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];
Vérifiez la réponse ICI
Dans les nouvelles versions IOS et en utilisant des contraintes automatiques correctes, vous n'avez plus besoin de référencer plus la cellule pour calculer la hauteur de la cellule.
Vérifiez ici
https://www.raywenderlich.com/129059/Self-Size-Table-view-cells
Cette question n'a aucun sens parce que dans
heightForRowAtIndexPath
aucune cellule n'est créée encore. Voici comment TableView fonctionne:
-numberOfSectionsInTableView
-numberOfRowsInSection
- heightForRowAtIndexPath
-cellForRowAtIndexPath
Donc, vous ne pouvez pas accéder aux cellules de heightForRowAtIndexPath
car avec une cellule la plus probable n'est pas encore créée.
Cependant, au cas où j'ai mal compris votre question, allez essayer:
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
La réponse évidente consiste à appeler cellForRowAtIndexPath
, mais vous avez peut-être déjà découvert qu'il y a des problèmes avec cela. Voir cette question si vous ne l'avez pas déjà fait: ditableView flexible/dynamique hauteurfornortindindexpath
Pour mon dernier projet, j'ai utilisé une sous-classe personnalisée d'UICELL et j'ai mis en œuvre une méthode comme celle-ci. J'ai ensuite appelé cela de table:heightForRowAtIndexPath:
(Après avoir levé le contenu de cette ligne).
+ (CGFloat) heightOfContent: (NSString *)content
{
CGFloat contentHeight =
[content sizeWithFont: DefaultContentLabelFont
constrainedToSize: CGSizeMake( DefaultCellSize.width, DefaultContentLabelHeight * DefaultContentLabelNumberOfLines )
lineBreakMode: UILineBreakModeWordWrap].height;
return contentHeight + DefaultCellPaddingHeight;
}
je vous suggère de calculer la bonne hauteur d'une ligne dans table:heightForRowAtIndexPath:
En utilisant votre structure de données (hauteur du texte, images, texte mutliline, etc.).
Et modifiez la hauteur du composant dans leur méthode -(void) layoutSubviews
.
Si vous souhaitez accéder aux cellules, utilisez des balises. Mais comme @jhaliya a dit qu'il est préférable de calculer la hauteur basée sur le contenu de la cellule. Si votre considération est avec la position de la cellule, je vous suggère d'utiliser une vue de défilement et de mettre en œuvre les cellules vous-même où que vous soyez.