5

Ai-je besoin de définir heightForRowAtIndexPath si j'utilise un UITableViewCell personnalisé? Dans mon NIB, j'ai déjà défini la hauteur de la cellule. Lorsque je redéfinis heightForRowAtIndexPath, le contenu de ma cellule n'apparaît pas, même s'il est défini sur la hauteur définie dans la NIB.Ai-je besoin de définir heightForRowAtIndexPath si j'utilise un UITableViewCell personnalisé?

Si je ne surpasse pas heightForRowAtIndexPath, le contenu de la cellule apparaît, mais il y a un débordement car la hauteur par défaut n'est pas assez grande.

Répondre

12

Si toutes vos lignes ont la même hauteur, vous pouvez définir la propriété rowHeight de votre UITableView au lieu de mettre en œuvre tableView:heightForRowAtIndexPath:. Si vous avez des rangées de hauteurs différentes, vous devez implémenter tableView:heightForRowAtIndexPath:.

Aucune de ces méthodes ne renverra automatiquement la hauteur de la cellule que vous avez définie dans votre NIB, car elles sont appelées avant de commencer à construire des cellules dans tableView:cellForRowAtIndexPath:. Pour utiliser la hauteur de la cellule définie dans votre NIB, je vous recommande de définir une propriété personnalisée de votre contrôleur appelée prototypeCell, qui contiendra une seule cellule qui ne sera jamais affichée sur votre table. Dans tableView:heightForRowAtIndexPath:, vérifiez si prototypeCell est nul. Si c'est le cas, initialisez-le à partir de votre NIB. Renvoyez ensuite prototypeCell.frame.size.height.

+2

+1 Grande utilisation du motif de conception de prototype! –

+0

Comment initialisez-vous le prototypeCell? Utilisez-vous 'initWithStyle: reuseIdentifier:'? Si je l'utilise, alors 'prototypeCell.frame.size.height' renvoie la hauteur par défaut (44) et non la hauteur définie dans le xib. – kraftydevil

+0

La charge de plume peut l'initialiser pour vous, et inclura la bonne taille. Vous pouvez enregistrer une plume pour la cellule, ou mapper une cellule prototype à un objet IBOutlet dans le fichier xib de votre contrôleur. –

Questions connexes