5

Devo impostare heightForRowAtIndexPath se sto usando un UITableViewCell personalizzato? Nella mia NIB ho già impostato l'altezza della cella.Devo impostare heightForRowAtIndexPath se sto usando un UITableViewCell personalizzato?

Quando eseguo un over-ride heightForRowAtIndexPath, il contenuto della mia cella non viene visualizzato, anche se è impostato sull'altezza definita nella NIB.

Se non si esegue il overhigh heightForRowAtIndexPath, viene visualizzato il contenuto della cella, ma è presente un overflow poiché l'altezza predefinita non è sufficientemente grande.

risposta

12

Se tutte le righe hanno la stessa altezza, è possibile impostare la proprietà rowHeight del proprio UITableView invece di implementare tableView:heightForRowAtIndexPath:. Se hai file di altezze diverse, devi implementare tableView:heightForRowAtIndexPath:.

Nessuno di questi metodi restituirà automaticamente l'altezza della cella definita nel NIB, come vengono chiamati prima di iniziare a costruire celle in tableView:cellForRowAtIndexPath:.

Per utilizzare l'altezza della cella definita nella NIB, è consigliabile definire una proprietà personalizzata del controller denominata prototypeCell, che conterrà una singola cella che non verrà mai visualizzata sul tavolo. In tableView:heightForRowAtIndexPath:, verificare se prototypeCell è nullo. Se lo è, inizializza dalla tua NIB. Quindi restituire prototypeCell.frame.size.height.

+2

+1 Ottimo utilizzo del modello di progettazione Prototype! –

+0

Come stai inizializzando il prototypeCell? Stai usando 'initWithStyle: reuseIdentifier:'? Se lo utilizzo, quindi 'prototypeCell.frame.size.height' restituisce l'altezza predefinita (44) e non l'altezza definita nello xib. – kraftydevil

+0

Il caricamento del pennino può inizializzarlo automaticamente e includerà l'altezza corretta. È possibile registrare un pennino per la cella o mappare una cella prototipo a un IBOutlet nello xib del controller. –