2015-02-23 17 views
11

Ho un UITableView, ogni cella ha un'immagine e due etichette, come si può vedere nella prima fotoauto delle dimensioni delle cellule fare UITableView saltare

enter image description here

Così sto cercando utilizzo ti auto- dimensionamento delle celle e tutto è ottimo, tranne 2 cose:

1) La prima e la seconda cella non mostrano il contenuto correttamente, ma dopo che si scorre verso il basso e poi si torna a loro tutto va bene. Ho provato a usare [tableview reloadData] in viewDidApper, ma non aiuta. Guarda le etichette in un primo momento che non si adattano. Puoi guardarlo su questo video https://www.youtube.com/watch?v=I9DGBl1c5vg

Guarda le etichette sulla prima cella.

2) È difficile. Sto scorrendo il tavolo e tutto è perfetto, ma il problema si verifica quando seleziono la riga. Mi spinge alla vista dei dettagli, ma quando premo "indietro" e ritorni alla vista principale, la vista tabella salta, quindi non ritorno alla riga selezionata, anche se faccio scorrere la tabella non scorre liscio, ma salti. Qui ci sono i link per due video, il primo mostra che lo scroll è liscio https://www.youtube.com/watch?v=9wAICcZwfO4 se non vado in dettaglio, e il secondo mostra il problema di salto https://www.youtube.com/watch?v=fRcQ3Za1wDM.

È assolutamente sicuro connesso con celle di dimensionamento automatico, perché se non lo uso, non si verifica questo problema. Se hai bisogno di un video che mostri le giuste funzionalità, dimmelo.

+0

ha u utilizzare vincoli per l'etichetta e la visualizzazione dell'immagine nella tua cella? –

+0

Sì, ci sono 3 vincoli per l'immagine: 1) spazio iniziale 2) spazio superiore 3) spazio finale; 3 vincolo per la prima etichetta: 1) spazio iniziale 2) spazio superiore 3) spazio finale; 4 vincoli per la seconda etichetta 1) spazio iniziale 2) spazio superiore 3) spazio finale 4) spazio inferiore – igrrik

+0

Quali sono i limiti dell'etichetta1 quando si applicano i vincoli? –

risposta

7

Ok, ho risolto entrambi i problemi.

Domanda 1

Ho aggiunto queste due righe

[cell.contentView setNeedsLayout]; 
[cell.contentView layoutIfNeeded]; 

in - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath prima return cell

Domanda 2

La soluzione sembrava b e molto semplice. Ho solo bisogno di implementare viewWillDissapear e ricaricare i dati in esso, in modo che il codice simile a questo

- (void)viewWillDisappear:(BOOL)animated;{ 
    [super viewWillDisappear:animated]; 
    [self.tableView reloadData]; 
} 

soluzione per me era semplice, se non funziona per qualcuno, qui ho trovato alcuni link utili.
1) UITableView layout messing up on push segue and return. (iOS 8, Xcode beta 5, Swift)
2) http://useyourloaf.com/blog/2014/08/07/self-sizing-table-view-cells.html

4

Sfortunatamente credo che entrambe le domande che si pongono siano bug di IOS.

questione (1)

Una soluzione semplice è suggerita da questo blog.

Quando viene visualizzata per la prima volta la vista tabella, è possibile che alcune celle non siano state ridimensionate correttamente. Ma quando si scorre la vista tabella, le nuove celle vengono visualizzate con l'altezza della riga corretta. Per risolvere il problema, puoi forzare una ricarica dopo la visualizzazione della schermata:

Aggiungi semplicemente quanto segue al tuo metodo viewDidAppear. L'ho provato e funziona molto bene.

[self.tableView reloadData]; 

questione (2)

Questa seconda domanda è un duplicato di questo seguente domanda:

IOS 8 UITableView self-sizing cells jump/shift visually when a new view controller is pushed

Una soluzione è suggerita dall'autore del se stesso questione, che sembra a posto. Tuttavia, non ho ancora provato questo.

Ok, l'ho risolto memorizzando nella cache l'altezza della cella in sizeThatFits e restituendo il valore per le altezze stimate della cella all'interno del delegato. Funziona magnificamente.

Sentiti libero di andare verso quella domanda per altre soluzioni proposte.

+0

Grazie, per la risposta. 1) Come ho detto prima questa correzione con i dati di ricaricamento non funziona per me 2) Non ho capito come ha fatto esattamente, e anche lui non ha usato i vincoli, ma gli chiederò – igrrik

+0

@igrrik, forse puoi scaricare il progetto da questo [link] (https://www.dropbox.com/s/rhza2amiuztpar8/SelfSizingDemoTemplate.zip?dl=0) e confrontarlo con il tuo e vedere quali sono le differenze? Questo codice di esempio è fornito da questo [blog] (http://www.appcoda.com/self-sizing-cells/) e il '[self.tableView reloadData]' funziona laggiù. O forse, se lo desideri, puoi pubblicare un codice correlato e darci un'occhiata a loro? Forse a causa di qualcos'altro. –

+0

abbiamo fatto dei progressi! Il primo problema è stato risolto. Ma il secondo è ancora qui. Bene, in realtà ci sono solo due righe di codice, fornite da questo post del blog: self.tableView.estimatedRowHeight = 239.0; self.tableView.rowHeight = UITableViewAutomaticDimension; Tutto il resto è fatto con vincoli. La differenza tra il mio progetto e il loro è che ho una visione d'immagine nella mia cella e una vista dettagliata. – igrrik

Problemi correlati