2016-04-04 15 views
5

Ho cercato di creare il complesso UITableViewCell tramite Autolayout ma sta causando un enorme rallentamento delle prestazioni durante lo scorrimento, quindi ho deciso di andare per i.e.ios UITableViewCell crea in modo programmatico in drawRect vs layoutSubviews

La complessità del layout della cella è come le schede di Facebook in cui ogni cella è diversa per il testo e le immagini dinamici.

Ho provato a eseguire il rendering della cella in layoutSubviews ma lo scorrimento è ancora scarso ma migliore di Autolayout.

Ho anche provato a rendere la cella in drawRect e questo offre le migliori prestazioni, ma durante lo scorrimento non posso aggiornare i frame mentre viene chiamato solo una volta.

Qualcuno può guidarmi qual è il caso migliore posso andare con le migliori prestazioni di scorrimento.? Sono bloccato .

+0

carte fb? non potresti chiarire? – faviomob

+0

significa fb news feed dove l'altezza dell'immagine varia e anche il post – Mukesh

+0

ci potrebbero essere anche commenti, contatori e altro materiale .. Ho riprodotto la cella di instagram con autolayout con prestazioni accettabili (non così sbalorditive come quella originale), quindi senza campione concreto è difficile dire quale potrebbe essere il problema con la soluzione. Credo che fb e instagram non usino l'autolayout :) – faviomob

risposta

0

Sono giunto anche alla stessa esatta conclusione che l'uso di storyboard con vincoli diventa troppo lento quando si tratta di celle di una certa complessità. Avevo 10+ diversi tipi di cellule. In questo scenario ho dovuto usare i frame.

Ho paura che non ci sia altro modo di impaginare le celle usando i fotogrammi delle viste dei bambini. Utilizzando i metodi heightForRowAtIndexPath e cellForRowAtIndexPath è possibile modellare completamente le celle.

Il primo metodo che viene chiamato è cellForRowAtIndexPath. In questo metodo modellerai completamente le tue cellule, esponendo le tue visualizzazioni, ecc. Una volta fatto tutto ciò, potrai determinare anche l'altezza delle tue celle. Puoi quindi recuperare l'altezza della cella dal frame della tua vista genitore e usarla.

In heightForRowAtIndexPath è possibile avere una singola riga che restituisce l'altezza della cella se si è invece salvata l'altezza in una matrice.

Ho ignorato i metodi di layoutsubviews poiché dovevo refactoring un gruppo di codice esistente. Tuttavia ho disposto la cella solo nel cellaForRowAtIndexPath e non nel metodo layoutsubviews. In questo metodo posso usare l'altezza delle viste secondarie per calcolare l'altezza genitore. Nelle viste di layout le viste sono disposte in un secondo momento e ciò potrebbe causare problemi.

In ogni caso, spero che questa informazione sia utile a qualcuno.

Problemi correlati