Quando utilizzare UICollectionView invece di UITableView?


92

Ho scoperto che UICollectionViewè come una versione aggiornata di UITableViewintrodotta in iOS6, ma quando dovrei scegliere UICollectionViewinvece di UITableView?

Ci sono ancora app che usano UITableView, se UICollectionViewpuò fare qualsiasi UITableViewcosa, perché le persone usano ancora UITableView? C'è una differenza per quanto riguarda le prestazioni?

Grazie!

Risposte:


75

Dipende dai requisiti. Il modo in cui l'applicazione scorre determina il tipo di interfaccia utente da integrare nell'applicazione.

Le persone utilizzano principalmente UICollectionviewper creare tipi di interfacce utente con più immagini mostrate in una griglia. Questo avrebbe una logica complessa usando UITableView, ma con UICollectionview, sarebbe facile.

Quando si utilizza UICollectionview, non è necessario impostare pulsanti con tag o altre cose ottenendo i valori degli elementi selezionati. Puoi semplicemente entrare -(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPathe dentro UITableViewDelegate:

`-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath`

Ottieni la riga selezionata invece dell'elemento, quindi per creare griglia o elementi modificati, UICollectionviewè meglio usare .

Per i dettagli dell'elenco di ogni articolo, le persone usano UITableViewperché mostra più informazioni su ogni articolo.

Documenti Apple:

Riferimento alla classe UICollectionView

La classe UICollectionView gestisce una raccolta ordinata di elementi di dati e li presenta utilizzando layout personalizzabili. Le viste di raccolta forniscono la stessa funzione generale delle viste di tabella tranne per il fatto che una vista di raccolta è in grado di supportare più di semplici layout a colonna singola. Le viste della raccolta supportano layout personalizzabili che possono essere utilizzati per implementare griglie a più colonne, layout affiancati, layout circolari e molti altri. Puoi persino modificare dinamicamente il layout di una visualizzazione della raccolta, se lo desideri.

Riferimento alla classe UITableView

Una vista tabella mostra un elenco di elementi in una singola colonna. UITableView è una sottoclasse di UIScrollView, che consente agli utenti di scorrere la tabella, sebbene UITableView consenta solo lo scorrimento verticale. Le celle che comprendono i singoli elementi della tabella sono oggetti UITableViewCell; UITableView utilizza questi oggetti per disegnare le righe visibili della tabella. Le celle hanno contenuto (titoli e immagini) e possono avere, vicino al bordo destro, viste accessorie. Le viste accessorie standard sono indicatori di divulgazione o pulsanti di divulgazione di dettagli; il primo porta al livello successivo in una gerarchia di dati e il secondo porta a una visualizzazione dettagliata di un elemento selezionato. Le viste accessorie possono anche essere controlli del framework, come interruttori e dispositivi di scorrimento, oppure possono essere viste personalizzate. Le viste tabella possono entrare in una modalità di modifica in cui gli utenti possono inserire, eliminare e riordinare le righe della tabella.


3
Penso in termini di estensibilità: la visualizzazione della raccolta ha più punteggi !!
thatzprem

Mi chiedo perché sia ​​mai necessario utilizzare tableview quando collectionview può soddisfare tutte le esigenze senza complessità aggiuntiva ma offre flessibilità (se un cliente ha mai bisogno di estendere il layout a più di una colonna, sarebbe abbastanza semplice farlo con collectionview ). Ho sempre usato le visualizzazioni di tabella per impostazione predefinita, ma ora dubito che abbia senso passare invece alle visualizzazioni di raccolta. Mi sto perdendo qualcosa?
vir us

è tutto basato sul requisito principale. La vista raccolta introduce tardi e fino ad allora tutti gli sviluppatori usano la tabella per creare griglia e quel genere di cose. ma ora collectionview è più popolare da usare per creare layout come tableview. così non penso sia una cattiva idea usare collectionviews
Nitin Gohel

Grazie per la tua spiegazione.
ssowri1

46

Ecco i miei criteri:

  • Se un UITableView può farlo, usalo

  • Se un UITableView richiede molto codice per farlo o non può farlo affatto, usa UICollectionView.

Devi considerare le restrizioni su UITableView prima di prendere una decisione: è una singola colonna. E puoi solo personalizzare le celle, ma non gli sfondi delle sezioni e simili. Quindi, se hai un elenco diretto di cose senza fronzoli extra - che sembra una vista iOS standard da palude, in pratica - allora usa UITableview. Se hai inserti personalizzati o un bordo attorno a ogni sezione, usa UICollectionView.

In realtà sto prendendo in considerazione UICollectionView per tutte le cose semplicemente perché è molto costoso quando inizi a sviluppare la tua vista come vista tabella, poi scopri in seguito che non può fare quella cosa che ti serve. Esperienza di prima mano;)

Modifica dopo ancora più esperienza con i due: ignora l'ultimo paragrafo. UICollectionView richiede molto codice boilerplate per farlo funzionare come un UITableView. Usa UICollectionView solo quando realmente necessario. ;)


3
Risposta perfetta che stavo cercando! Questo dovrebbe essere votato di più!
rak appdev

2
Rivelare la tua esperienza personale e i tuoi consigli è molto utile!
Aero

1
Ho decisamente ridacchiato leggendo questo, ben detto! UITableView è personalizzabile come qualsiasi altra cosa, tranne che si bloccherà se aggiungi animazioni che compensano l'accodamento. Consiglierei alla tua risposta di andare con la guida alle animazioni e un po 'di ricerca per scoprire personalmente quante viste interne esistono in modo da poterle aggiornare e il problema "Non riesco a rendere invisibile la linea di separazione" che alla fine trovi non sorprende chiunque. Le viste nascoste in scrollView, UIButton e tableView eliminano la maggior parte delle personalizzazioni fino a quando non sai che sono nascoste nelle cose
Stephen J,

33

Per elenchi semplici e navigazione in avanti / indietro, utilizzare UITableView.

Se hai bisogno di un alto grado di personalizzazione, usa UICollectionView.

In generale, nello sviluppo del software, è meglio scegliere l'approccio che rappresenta "The Simplest Possible Thing".

EDIT: a partire da iOS 14, UICollectionViewora può anche fare elenchi ed è ora l'approccio consigliato. Vedi questa sessione da WWDC20 per maggiori informazioni e dettagli sull'implementazione: https://developer.apple.com/videos/play/wwdc2020/10026/


14

Secondo il mio punto di vista, la differenza principale tra collectionView e tableView è quella

TABLEVIEW -> mostra l'elenco degli elementi in una sola colonna.

COLLEZIONE-VISTA -> mostra l'elenco degli elementi in più colonne.

Spero che ti possa aiutare.


11

Se scegli UITableView per iPhone, assicurati di aver considerato prima la tua strategia per iPad. Se desideri un layout specifico per iPad, potresti volere che il layout a colonna singola diventi una griglia.


8

Sebbene non sia richiesto, utilizzo sempre una collectionview. In questo modo posso adattare facilmente il modo in cui le mie raccolte vengono presentate per risoluzioni diverse. Un vantaggio è che è pronto per aggiungere rapidamente nuovi tipi di celle durante il refactoring in futuro.

Non vedo alcun punto di vista da tavolo. È molto semplice utilizzare una vista raccolta per rappresentare una tabella. IMO.


4

Dipende totalmente da come devono essere visualizzati i tuoi dati. Come accennato da molti sopra, se hai bisogno di un solo set di dati e anche questo non è complesso, scegli un UITableViewaltro uso UICollectionView.

UICollectionView è facile da personalizzare.

Se hai a che fare con più altezze di celle o giù di lì, allora vai per UICollectionView.


4

Dalla mia esperienza personale i due elementi dovrebbero essere confrontati solo vagamente.

TableView

Un TableView è un elemento dell'interfaccia utente progettato per mostrare i dati in un formato elenco. Ci sono alcune funzionalità che vengono fornite di serie con un UITableView, come ad esempio:

  • Vista accessori
  • Stile di selezione delle celle
  • Stile di modifica (pulsanti Elimina e modifica).

Gli elementi di cui sopra migliorano l'usabilità dei dati durante la visualizzazione e l'interazione in un formato elenco. Come visualizzare le e-mail.

CollectionView

Una CollectionView è un elemento dell'interfaccia utente progettato per mostrare il contenuto utilizzando un layout personalizzato (in genere tutto ciò che non è un elenco). CollectionViews migliora la funzionalità di visualizzazione dei dati in stili di layout completamente personalizzati e anche la modifica dinamica dei layout al volo. Alcuni esempi sono:

  • Elenchi orizzontali
  • Gallerie fotografiche
  • Visualizzazioni in miniatura
  • Giostre
  • Quadranti
  • Disposizione degli elementi su una mappa
  • eccetera.

CollectionViews consente anche selezioni multiple.

Conclusione

Come puoi vedere da quanto sopra, entrambi hanno casi d'uso completamente diversi e sono progettati per migliorare lo sviluppo e l'usabilità dei propri set di dati specifici.

Se stai cercando di visualizzare qualsiasi cosa in uno stile elenco con le seguenti interazioni: - Aggiunta - Eliminazione - Riordino Quindi un UITableView semplificherà questo processo fornendo il supporto immediatamente.

Qualsiasi altra cosa, dovresti sfruttare i vantaggi di CollectionView poiché hai maggiore flessibilità.


2

Entrambi dipendono dai requisiti. Le viste tabella supportano anche una varietà di scenari di modifica. Questo supporto non è stato implementato nelle classi Collection View. Se stai convertendo da una vista tabella che si basa su questi metodi, aspettati di fare un po 'di lavoro in più nella vista raccolta. Le intestazioni di sezione della Vista raccolta possono essere posizionate ovunque all'interno della vista. e UITableView non è necessario impostare pulsanti con tag o altre cose ottenendo i valori degli elementi selezionati.


1

In pratica, tutti usano UICollectionView che ho incontrato, quando hanno solo bisogno di un UITableView. "È unidimensionale. Va su e giù. Perché aggiungi metodi delegati non necessari per il layout E i dati?". Una volta ho trascorso altre 2 ore ad aiutare una startup a scoprire perché il loro UICollectionViewCell è stato schiacciato perché il proprietario, che non ha letto il manuale delle animazioni, né HIG, né la guida UICollectionView, ha deciso di usarlo e aggiungere altezze e anim variabili. Inutile dire che si è dato il mal di testa e ha perso molto tempo su un problema non critico per l'azienda che avrebbe potuto evitare semplicemente utilizzando una cella di tabella, poiché non c'è un delegato di layout aggiuntivo + pennino.

Fammi capire, sono tutto per UICollectionView quando i tuoi dati e il tuo display ne hanno bisogno. Sono molto potenti. Ma in pratica, la maggior parte delle persone che ho visto li ha usati negli elenchi.

Questo solleva un altro difetto. Sono anche usati su elenchi brevi e costanti che non cambieranno mai. In questo caso, crea solo un file Xib. Oppure scrivi una visualizzazione personalizzata che li impili. Perché? Perché non è necessaria la gestione della memoria per 5 set di etichette con un pulsante o un interruttore. Se possono cambiare, allora sì, usa un elenco. Se vuoi la fisica, UICollectionView funziona bene con alcuni effetti interessanti. Ma è davvero necessario aggiungere 5 metodi delegati e un sistema di layout per 5 etichette che non si sposteranno mai?

Inoltre, non sto dimenticando che iOS ora ha anche una vista di stacking nativa. Non riesco mai a far sì che si deformi come voglio, anche se sono abbastanza esperto nei sistemi 2D e di animazione, quindi non uso mai quello integrato.

Tutto quello che sto dicendo è definire le tue esigenze. Forse non hai bisogno di nessuno di questi, se la tua interfaccia utente non aggiunge / rimuove elementi e non si aggiorna. O forse vuoi scrivere un gioco di carte e buttarlo fuori virtualmente su un tavolo, quindi usa UICollectionView con un sistema fisico per la sua guida al layout.


0

In base alle nostre esigenze, stiamo scegliendo TableView o CollectionView.

Esempio:

Per i contatti telefonici tableView è l'opzione migliore.

Per la galleria fotografica, la visualizzazione della raccolta sarà l'opzione migliore.


7
Anche se sono d'accordo che il modo in cui è stato espresso sembra più un'opinione e penso che dovrebbe essere solo un commento, non una risposta.
Popeye

0

Ho avuto questo problema nel mio progetto attuale. Quale usare. Nel mio caso è stato davvero semplice. Avevo bisogno di entrambi. Avevo bisogno che la mia vista assomigliasse a UITableView e anche per cambiare il suo cambiamento / layout. Quindi, è stato utilizzato UICollectionView. Uso anche UITableView ovunque non ho bisogno di personalizzazioni extra. Poiché UiTableView viene fornito con un layout predefinito che include immagini e testo, lo uso per semplicità.


0

In base alle nostre esigenze, scegliamo UITableView o UICollection view.

Se vogliamo visualizzare immagini o elementi in tipo griglia o se abbiamo bisogno di maggiore personalizzazione, utilizziamo UICollectionview.

Per elencare ogni articolo con dettagli e sottodettagli usiamo UITableView.

UICollectionView: la classe UICollectionView gestisce una raccolta ordinata di elementi di dati e li presenta utilizzando layout personalizzabili. Le viste di raccolta forniscono la stessa funzione generale delle viste di tabella, tranne per il fatto che una vista di raccolta è in grado di supportare più di semplici layout a colonna singola.

UITableView: una vista tabella mostra un elenco di elementi in una singola colonna. UITableView è una sottoclasse di UIScrollView, che consente agli utenti di scorrere la tabella, sebbene UITableView consenta solo lo scorrimento verticale.


0

Secondo la mia vista per la visualizzazione Grid View, usa UI Collection View. Tutte le altre visualizzazioni elenco usano UITable View


0

Personalmente penso che UICollectionView possa fare la maggior parte del lavoro che può fare UITableview. beh, allo stesso tempo è più complesso da usare.

Ti suggerisco di utilizzare UICollectionView come TableView nel caso in cui il tuo manager cambi i requisiti in futuro.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.