2014-04-06 17 views
5

Attualmente sto usando il layout automatico con lo storyboard per ridimensionare dinamicamente il UITableViewCell personalizzato. Tutto funziona come dovrebbe, tranne che c'è una perdita di memoria durante lo scorrimento.Carica personalizzato UITableViewCell dallo storyboard

So che il problema è da chiamare

[self.tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

dall'interno

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 

mia domanda è questa, quale sarebbe il modo migliore per creare una cella di riferimento? Come caricare una cella dallo storyboard senza dequeueReusableCellWithIdentifier?

E va bene forse chiamare dequeueReusableCellWithIdentifier da viewDidLoad e creare una cella di riferimento come una proprietà?

Ho bisogno di una cella di riferimento per scopi di dimensionamento.

Grazie per qualsiasi aiuto.

risposta

10

Per quanto riguarda la modalità di creazione cella di riferimento (vedi domanda iniziale), ci sono un paio di opzioni per quanto posso vedere:

  1. creare una cella personalizzato con XIB, grande articolo qui ->a link!

    • questo mi è stato segnalato da @smileyborg, grazie!
  2. creare la cella personalizzata nel codice, insieme con i vincoli.

  3. creare il tuo cellulare personalizzato in storyboard come prototipo di cella

    • dopo che ci sono 2 opzioni:
      • drag and drop cella personalizzato da vista tabella alla scena storyboard, come un pennino livello superiore oggetto (non parte della gerarchia della vista), e semplicemente creare uno sbocco ad esso.
      • copia la cella personalizzata e incollala nella scena dello storyboard. Quando lo si utilizza in questo modo, non è necessario registrare la cella originale con la tabella per la disconnessione.
      • problema minore con entrambi gli approcci è che una volta trascinate e rilasciate celle personalizzate nella scena storyboard, non sarete in grado di vederlo visivamente e organizzare l'interfaccia utente.
    • ottimo articolo qui ->a link!

Grazie a tutti per l'aiuto!

0

Si può solo annullare l'accodamento della cella una volta e memorizzare l'altezza:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSNumber *height; 

    if (!height) 
    { 
     UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"YourCustomCell"]; 
     height = @(cell.bounds.size.height); 
    } 

    return [height floatValue]; 
} 
1

E 'ok per chiamare forse dequeueReusableCellWithIdentifier da viewDidLoad e creare una cella di riferimento come una proprietà?

Sì, lo puoi fare. O pigri inizializzare la proprietà:

- (UITableViewCell *)referenceCell 
{ 
    if (!_referenceCell) { 
     _referenceCell = [self.tableView dequeueReusableCellWithIdentifier:@"Cell"]; 
    } 
    return _referenceCell; 
} 
+0

Sembra che anche questo creerà delle perdite. Lo sto testando proprio ora. – Iki

+0

Ieri sera, ho avuto una conversazione con Tyler Fox (@smileyborg), ha creato un ottimo esempio per il layout automatico e l'altezza della visualizzazione dinamica della tabella [collegamento] (http://stackoverflow.com/questions/18746929/using-auto- layout-in-uitableview-for-dynamic-cell-layouts-variable-row-heights/18746930 # 18746930) e ha anche confermato che l'uso di dequeueReusableCellWithIdentifier al di fuori di cellForRowAtIndexPath creerà probabilmente delle perdite. – Iki

+0

Curioso perché @smileyborg pensa che questo colerà. Il mio [TLIndexPathTools] (https://github.com/wtmoose/TLIndexPathTools) utilizza questo metodo per calcolare automaticamente l'altezza della cella che nessuno ha mai segnalato una perdita. E l'ho appena testato. Se hai uno scenario in cui si perde, vorrei dare un'occhiata. –

Problemi correlati