¿Cuándo usar UICollectionView en lugar de UITableView?

92

Descubrí que UICollectionViewes como una versión mejorada de la UITableViewintroducida en iOS6, pero ¿cuándo debería elegir en UICollectionViewlugar de UITableView?

Todavía hay aplicaciones que usan UITableView, si se UICollectionViewpuede hacer algo UITableView, ¿por qué la gente todavía las usa UITableView? ¿Existe alguna diferencia en cuanto a rendimiento?

¡Gracias!

wz366
fuente

Respuestas:

75

Eso depende de los requisitos. La forma en que fluye la aplicación determina qué tipo de interfaz de usuario se integrará en la aplicación.

La gente usa principalmente UICollectionviewpara crear tipos de UI con múltiples imágenes mostradas en una cuadrícula. Esto tendría una lógica compleja UITableView, pero con UICollectionvieweso sería fácil.

Al usarlo UICollectionview, no es necesario configurar botones con etiquetas u otras cosas obteniendo valores de elementos seleccionados. Simplemente puede obtener -(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPathy entrar UITableViewDelegate:

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

Obtiene la fila seleccionada en lugar del elemento, por lo que para crear cuadrículas o elementos modificados, usar UICollectionviewes mejor.

Para los detalles de la lista de cada artículo, la gente usa UITableViewporque muestra más información sobre cada artículo.

Documentos de Apple:

Referencia de la clase UICollectionView

La clase UICollectionView administra una colección ordenada de elementos de datos y los presenta mediante diseños personalizables. Las vistas de colección brindan la misma función general que las vistas de tabla, excepto que una vista de colección puede admitir más que solo diseños de una sola columna. Las vistas de colección admiten diseños personalizables que se pueden usar para implementar cuadrículas de varias columnas, diseños en mosaico, diseños circulares y muchos más. Incluso puede cambiar el diseño de una vista de colección de forma dinámica si lo desea.

Referencia de la clase UITableView

Una vista de tabla muestra una lista de elementos en una sola columna. UITableView es una subclase de UIScrollView, que permite a los usuarios desplazarse por la tabla, aunque UITableView solo permite el desplazamiento vertical. Las celdas que comprenden los elementos individuales de la tabla son objetos UITableViewCell; UITableView usa estos objetos para dibujar las filas visibles de la tabla. Las celdas tienen contenido (títulos e imágenes) y pueden tener, cerca del borde derecho, vistas accesorias. Las vistas de accesorios estándar son indicadores de divulgación o botones de divulgación de detalles; el primero conduce al siguiente nivel en una jerarquía de datos y el segundo conduce a una vista detallada de un elemento seleccionado. Las vistas accesorias también pueden ser controles de marco, como interruptores y controles deslizantes, o pueden ser vistas personalizadas. Las vistas de tabla pueden ingresar a un modo de edición donde los usuarios pueden insertar, eliminar y reordenar filas de la tabla.

Nitin Gohel
fuente
3
Creo que en términos de extensibilidad: ¡la vista de colección obtiene más puntajes!
thatzprem
Me pregunto por qué alguna vez se necesita usar tableview cuando collectionview puede satisfacer todas las necesidades sin complejidad adicional pero brinda flexibilidad (si un cliente alguna vez necesita extender el diseño a más de una columna, sería bastante sencillo hacerlo con collectionview ). Siempre estaba usando vistas de tabla de forma predeterminada, pero ahora dudo que tenga sentido cambiar a vistas de colección. ¿Me estoy perdiendo de algo?
vir us
todo se basa en el requisito principal. La vista de colección se introduce tarde y hasta entonces todos los desarrolladores usan la tabla para hacer cuadrículas y ese tipo de cosas. pero ahora una vista de colección de días es más popular para usar para hacer diseños como tableview. también, así que no creo que sea una mala idea utilizar
vistas de
Gracias por su explicación.
ssowri1
47

Aquí está mi criterio:

  • Si un UITableView puede hacerlo, utilícelo

  • Si un UITableView necesita mucho código para hacerlo o no puede hacerlo en absoluto, use UICollectionView.

Debe considerar las restricciones en UITableView antes de tomar una decisión: es una sola columna. Y solo puede personalizar las celdas, pero no los fondos de las secciones y demás. Entonces, si tiene una lista directa de cosas sin adornos adicionales, que básicamente parece una vista estándar de iOS pantanosa, use UITableview. Si tiene inserciones personalizadas o un borde alrededor de cada sección, use UICollectionView.

De hecho, estoy considerando UICollectionView para todas las cosas simplemente porque es muy costoso cuando comienza a desarrollar su vista como una vista de tabla, y luego descubre que no puede hacer lo único que necesita que haga. Experiencia de primera mano;)

Edite después de tener aún más experiencia con los dos: ignore el último párrafo. UICollectionView requiere una gran cantidad de código repetitivo para que funcione como un UITableView. Utilice UICollectionView solo cuando sea realmente necesario. ;)

n13
fuente
3
¡La respuesta perfecta que estaba buscando! ¡Esto debería ser votado más!
rak appdev
2
¡Revelar su experiencia personal y recomendaciones es muy útil!
Aero
1
Definitivamente me reí entre dientes leyendo esto, ¡bien dicho! UITableView es tan personalizable como cualquier otra cosa, excepto que se bloqueará si agrega animaciones que compensan la cola. Recomendaría que su respuesta vaya con la guía de animaciones y que investigue un poco para saber personalmente cuántas vistas internas existen para que pueda actualizarlas, y el problema "No puedo hacer que la línea de separación sea invisible" que finalmente encontrará no le sorprenderá nadie. Las vistas ocultas en scrollView, UIButton y tableView eliminan la mayoría de las personalizaciones hasta que sepa que están ocultas en las cosas
Stephen J
33

Para listas simples y navegación hacia adelante / hacia atrás, use UITableView.

Si necesita un alto grado de personalización, utilice UICollectionView.

En términos generales, en el desarrollo de software, es mejor elegir el enfoque que represente "lo más simple posible".

EDITAR: A partir de iOS 14, UICollectionViewahora también puede hacer listas y ahora es el enfoque recomendado. Consulte esta sesión de WWDC20 para obtener más información y detalles de implementación: https://developer.apple.com/videos/play/wwdc2020/10026/

Andrew Ebling
fuente
14

Según mi punto de vista, la principal diferencia entre collectionView y tableView es que

TABLEVIEW -> muestra la lista de elementos en una sola columna.

COLLECTION-VIEW -> muestra la lista de elementos en varias columnas.

Espero que te ayude.

Muhammad Waqas Bhati
fuente
11

Si elige UITableView para iPhone, asegúrese de haber considerado primero su estrategia de iPad. Si desea un diseño específico para iPad, es posible que desee que el diseño de una sola columna se convierta en una cuadrícula.

BricoleurDev
fuente
8

Aunque no es obligatorio, siempre uso una vista de colección. De esa manera puedo adaptar fácilmente la forma en que se presentan mis colecciones para diferentes resoluciones. Una ventaja es que está listo para agregar rápidamente nuevos tipos de celdas cuando se refactorice en el futuro.

No veo el sentido de las vistas de mesa. Es muy sencillo utilizar una vista de colección para representar una tabla. OMI.

Chris Van Buskirk
fuente
4

Depende totalmente de cómo se muestren sus datos. Como lo mencionaron muchos anteriormente, si solo necesita un único conjunto de datos y eso tampoco es complejo, opte por UITableViewotro uso UICollectionView.

UICollectionView es fácil de personalizar.

Si está tratando con varias alturas de celda, entonces hágalo UICollectionView.

rompe pensamientos
fuente
4

Desde mi experiencia personal, los dos elementos solo deben compararse libremente.

TableView

Un TableView es un elemento de la interfaz de usuario diseñado para mostrar datos en formato de lista. Existe cierta funcionalidad que viene de serie con UITableView, como:

  • Vista de accesorios
  • Estilo de selección de celda
  • Editar estilo (botones Eliminar y editar).

Los elementos anteriores mejoran la usabilidad de los datos cuando se muestran e interactúan en un formato de lista. Como ver correos electrónicos.

CollectionView

Un CollectionView es un elemento de la interfaz de usuario diseñado para mostrar contenido con un diseño personalizado (generalmente cualquier cosa que no sea una lista). CollectionViews mejora la funcionalidad de mostrar datos en estilos de diseño completamente personalizados y también cambia los diseños dinámicamente sobre la marcha. Algunos ejemplos son:

  • Listas horizontales
  • Galerías de fotos
  • Vistas en miniatura
  • Carruseles
  • Diales
  • Disposición de elementos en un mapa
  • etc.

CollectionViews también permite múltiples selecciones.

Conclusión

Como puede ver en lo anterior, ambos tienen casos de uso completamente diferentes y están diseñados para mejorar el desarrollo y la usabilidad de sus propios conjuntos de datos específicos.

Si está buscando mostrar algo en un estilo de lista con las siguientes interacciones: - Agregar - Eliminar - Reordenar Luego, UITableView simplificará este proceso al proporcionar el soporte directamente desde el primer momento.

Cualquier otra cosa, debe aprovechar los beneficios de CollectionView ya que tiene más flexibilidad.

Matthew Cawley
fuente
2

Ambos dependen de los requisitos. Las vistas de tabla también admiten una variedad de escenarios de edición. Este soporte no se ha implementado en las clases de Vista de colección. Si está convirtiendo desde una vista de tabla que se basa en estos métodos, espere hacer un poco más de trabajo pesado en la vista de colección. Los encabezados de las secciones de Vista de colección se pueden colocar en cualquier lugar dentro de la vista. y UITableView no necesitan establecer botones con etiquetas u otras cosas obteniendo valores de elementos seleccionados.

Bhumesh Purohit
fuente
1

En la práctica, todos usan UICollectionView con el que me he encontrado, cuando solo necesitan un UITableView. "Es unidimensional. Sube y baja. ¿Por qué está agregando métodos de delegado innecesarios para el diseño Y los datos?". Una vez pasé 2 horas adicionales ayudando a una startup a descubrir por qué su UICollectionViewCell se aplastó porque el propietario, que no leyó el manual de animaciones, ni HIG, ni la guía UICollectionView, decidió usarlo y agregar alturas variables y animaciones. No hace falta decir que se dio un dolor de cabeza y perdió mucho tiempo en un problema no crítico para el negocio que podría haber evitado simplemente usando una celda de tabla, ya que no hay delegado de diseño adicional + Nib.

Déjame aclarar esto, estoy a favor de UICollectionView cuando tus datos y pantalla lo necesiten. Son muy poderosos. Pero en la práctica, la mayoría de las personas que he visto las han estado usando en listas.

Esto trae a colación otro defecto. También se utilizan en listas breves y constantes que no cambiarán nunca. En este caso, simplemente haga un Xib. O escriba una vista personalizada que los apile. ¿Por qué? Porque no necesita la gestión de memoria para 5 juegos de etiquetas con un botón o interruptor. Si pueden cambiar, entonces sí, use una lista. Si quieres física, entonces UICollectionView funciona bien con algunos efectos geniales. Pero, ¿realmente necesita agregar 5 métodos de delegado y un sistema de diseño para 5 etiquetas que nunca se moverán?

Además, no olvido que iOS ahora también tiene una vista de apilamiento nativa. Nunca consigo que se deforme como quiero, a pesar de que soy bastante experto en los sistemas 2D y de animación, por lo que nunca uso el integrado.

Todo lo que digo es que defina sus requisitos. Tal vez no necesite ninguno de estos, si su interfaz de usuario no está agregando / eliminando elementos y actualizándose. O tal vez desee escribir un juego de cartas y tirarlos virtualmente en una mesa, luego use UICollectionView con un sistema de física para su guía de diseño.

Stephen J
fuente
0

Según nuestra necesidad, elegimos TableView o CollectionView.

Ejemplo:

Para los contactos del teléfono, tableView es la mejor opción.

Para la galería de fotos, la vista de colección será la mejor opción.

Ramdhas
fuente
7
Si bien estoy de acuerdo, la forma en que se ha expresado parece más una opinión y creo que debería ser solo un comentario, no una respuesta.
Popeye
0

Tuve este problema en mi proyecto actual. Cuál usar. En mi caso fue realmente simple. Necesitaba ambos. Necesitaba que mi vista se pareciera a UITableView y también cambiar su cambio / diseño. Entonces, se usó UICollectionView. También uso UITableView en todos los lugares donde no necesito ninguna personalización adicional. Dado que UiTableView viene con un diseño predeterminado que incluye imágenes y texto, lo uso por simplicidad.

Robert J. Clegg
fuente
0

Según nuestro requisito, elegimos la vista UITableView o UICollection.

Si queremos mostrar imágenes o elementos en tipo de cuadrícula o si necesitamos más personalización, usamos UICollectionview.

Para enumerar cada elemento con detalles y subdetalles, usamos UITableView.

UICollectionView: la clase UICollectionView administra una colección ordenada de elementos de datos y los presenta mediante diseños personalizables. Las vistas de colección brindan la misma función general que las vistas de tabla, excepto que una vista de colección puede admitir más que solo diseños de una sola columna.

UITableView: una vista de tabla muestra una lista de elementos en una sola columna. UITableView es una subclase de UIScrollView, que permite a los usuarios desplazarse por la tabla, aunque UITableView solo permite el desplazamiento vertical.

firoz khan
fuente
0

Según mi vista para la visualización de la vista de cuadrícula, use la vista de colección de la interfaz de usuario.

Subathra D
fuente
0

Personalmente, creo que UICollectionView puede hacer la mayor parte del trabajo que puede hacer UITableview. bueno, al mismo tiempo, es más complejo de usar.

Le sugiero que use UICollectionView como TableView en caso de que su gerente cambie los requisitos en el futuro.

Qi Li
fuente