Quando usar UICollectionView em vez de UITableView?

92

Achei que UICollectionViewé como uma versão atualizada UITableViewintroduzida no iOS6, mas quando devo escolher em UICollectionViewvez de UITableView?

Ainda há aplicativos usando UITableView, se UICollectionViewpode fazer alguma coisa UITableViewpode fazer, por que as pessoas ainda usam UITableView? Existe uma diferença no que diz respeito ao desempenho?

Obrigado!

wz366
fonte

Respostas:

75

Isso depende dos requisitos. A maneira como o aplicativo flui determina qual tipo de UI integrar ao aplicativo.

As pessoas usam principalmente o UICollectionviewpara criar tipos de UIs com várias imagens mostradas em uma grade. Isso teria uma lógica complexa usando UITableView, mas com UICollectionview, seria fácil.

Ao usar UICollectionview, você não precisa definir botões com tags ou outras coisas obtendo valores de itens selecionados. Você pode simplesmente obter -(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPathe entrar UITableViewDelegate:

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

Você obtém a linha selecionada em vez do item, portanto, para criar uma grade ou itens modificados, UICollectionviewé melhor usar .

Para os detalhes de listagem de cada item, as pessoas usam UITableViewporque mostra mais informações sobre cada item.

Apple Docs:

Referência de classe UICollectionView

A classe UICollectionView gerencia uma coleção ordenada de itens de dados e os apresenta usando layouts personalizáveis. As visualizações de coleção fornecem a mesma função geral que as visualizações de tabela, exceto que uma visualização de coleção é capaz de suportar mais do que apenas layouts de coluna única. As visualizações de coleção suportam layouts personalizáveis ​​que podem ser usados ​​para implementar grades de várias colunas, layouts lado a lado, layouts circulares e muito mais. Você pode até mesmo alterar o layout de uma visualização de coleção dinamicamente, se desejar.

Referência de classe UITableView

Uma visualização de tabela exibe uma lista de itens em uma única coluna. UITableView é uma subclasse de UIScrollView, que permite aos usuários rolar pela tabela, embora UITableView permita apenas a rolagem vertical. As células que constituem os itens individuais da tabela são objetos UITableViewCell; UITableView usa esses objetos para desenhar as linhas visíveis da tabela. As células têm conteúdo - títulos e imagens - e podem ter, próximo à borda direita, visualizações acessórias. As visualizações de acessórios padrão são indicadores de divulgação ou botões de divulgação de detalhes; o primeiro leva ao próximo nível em uma hierarquia de dados e o último leva a uma visão detalhada de um item selecionado. As visualizações acessórias também podem ser controles de estrutura, como interruptores e controles deslizantes, ou podem ser visualizações personalizadas. As visualizações de tabela podem entrar em um modo de edição onde os usuários podem inserir, excluir e reordenar as linhas da tabela.

Nitin Gohel
fonte
3
Acho que em termos de extensibilidade - a visualização da coleção tem mais pontos !!
thatzprem
Estou me perguntando por que alguém precisa usar tableview quando o collectionview pode atender a todas as necessidades sem complexidade adicional, mas fornece flexibilidade (se um cliente precisar estender o layout para mais de uma coluna, seria muito simples fazer isso com o collectionview ) Eu sempre usei tableviews por padrão, mas agora duvido que faça sentido mudar para collectionviews. Estou esquecendo de algo?
vir nos
é tudo baseado no requisito principal. A visualização da coleção é apresentada tarde e até então todos os desenvolvedores usam a tabela para fazer grade e esse tipo de coisa. mas hoje em dia, o collectionview é mais popular para fazer layouts como tableview. também, não acho que seja uma má ideia usar o collectionviews
Nitin Gohel
Obrigado pela sua explicação.
ssowri1
46

Aqui estão meus critérios:

  • Se um UITableView pode fazer isso, use-o

  • Se um UITableView precisa de muito código para fazer isso ou não pode fazer nada, use UICollectionView.

Você deve considerar as restrições de UITableView antes de tomar uma decisão: é uma única coluna. E você só pode personalizar as células, mas não os planos de fundo das seções e tal. Então, se você tem uma lista direta de coisas sem enfeites extras - que parece uma visão padrão do iOS, basicamente - então use UITableview. Se você tiver inserções personalizadas ou uma borda ao redor de cada seção, use UICollectionView.

Na verdade, estou considerando UICollectionView para todas as coisas, simplesmente porque é muito caro quando você começa a desenvolver sua visualização como uma visualização de tabela e, mais tarde, descobre que não pode fazer aquilo que você precisa. Experiência em primeira mão;)

Edite depois de ainda mais experiência com os dois: Desconsidere o último parágrafo. UICollectionView requer muito código clichê para funcionar como um UITableView. Use UICollectionView somente quando realmente necessário. ;)

n13
fonte
3
A resposta perfeita que eu estava procurando! Isso deve ser votado mais!
rak appdev
2
Divulgar sua experiência pessoal e recomendações é muito útil!
aero
1
Eu definitivamente ri lendo isso, bem dito! UITableView é tão personalizável quanto qualquer coisa, exceto que irá travar se você adicionar animações que compensem a fila. Eu recomendaria sua resposta para ir com o guia de animações, e algumas pesquisas para aprender pessoalmente quantas visualizações internas existem para que você possa atualizá-las, e o problema "Não consigo tornar a linha separadora invisível" que você eventualmente descobrir não surpreenderá qualquer um. Visualizações ocultas em scrollView, UIButton e tableView descartam a maioria das personalizações até que você saiba que estão escondidas nas coisas
Stephen J
33

Para listas simples e navegação para frente / para trás, use UITableView .

Se você precisa de um alto grau de personalização, use UICollectionView .

De modo geral, no desenvolvimento de software, é melhor escolher a abordagem que representa "A Coisa Mais Simples Possível".

EDIT: A partir do iOS 14, UICollectionViewagora pode fazer listas também e agora é a abordagem recomendada. Consulte esta sessão do WWDC20 para obter mais informações e detalhes de implementação: https://developer.apple.com/videos/play/wwdc2020/10026/

Andrew Ebling
fonte
14

De acordo com meu ponto de vista, a principal diferença entre collectionView e tableView é que

TABLEVIEW -> mostra lista de itens em apenas uma coluna.

COLEÇÃO-VISUALIZAR -> mostra a lista de itens em várias colunas.

Espero que ajude você.

Muhammad Waqas Bhati
fonte
11

Se você escolher UITableView para iPhone, certifique-se de considerar a estratégia do iPad primeiro. Se você deseja um layout específico do iPad, pode desejar que o layout de coluna única se torne uma grade.

BricoleurDev
fonte
8

Embora não seja obrigatório, sempre uso uma visão de coleção. Dessa forma, posso adaptar facilmente como minhas coleções são apresentadas para diferentes resoluções. Uma vantagem é que ele está pronto para adicionar rapidamente novos tipos de células ao refatorar no futuro.

Não vejo motivo para tableviews. É muito simples usar uma visão de coleção para representar uma tabela. IMO.

Chris Van Buskirk
fonte
4

É totalmente dependente de como seus dados serão mostrados. Como mencionado por muitos acima, se você precisar de apenas um único conjunto de dados e que não seja complexo, vá para UITableViewoutro uso UICollectionView.

UICollectionView é fácil de personalizar.

Se você está lidando com várias alturas de células ou algo assim, vá em frente UICollectionView.

destruidor de pensamentos
fonte
4

Pela minha experiência pessoal, os dois elementos devem ser comparados apenas vagamente.

Vista de mesa

Um TableView é um elemento de IU projetado para mostrar dados em formato de lista. Existem certas funcionalidades que vêm como padrão com um UITableView, como:

  • Vista de acessório
  • Estilo de Seleção de Célula
  • Estilo de edição (botões Excluir e editar).

Os elementos acima aumentam a usabilidade dos dados ao exibir e interagir em formato de lista. Como ver e-mails.

CollectionView

Um CollectionView é um elemento de IU projetado para mostrar conteúdo usando um layout personalizado (geralmente qualquer coisa que não seja uma lista). CollectionViews melhora a funcionalidade de exibição de dados em estilos de layout totalmente personalizados e também altera layouts dinamicamente em tempo real. Alguns exemplos são:

  • Listas Horizontais
  • Galerias de fotos
  • Visualizações de miniaturas
  • Carrosséis
  • Dials
  • Disposição de elementos em um mapa
  • etc.

CollectionViews também permite várias seleções.

Conclusão

Como você pode ver acima, ambos têm casos de uso completamente diferentes e são projetados para aprimorar o desenvolvimento e a usabilidade de seus próprios conjuntos de dados específicos.

Se você deseja exibir qualquer coisa em um estilo de lista com as seguintes interações: - Adicionando - Excluindo - Reordenando Então, um UITableView simplificará este processo, fornecendo o suporte pronto para uso.

De qualquer outra forma, você deve aproveitar os benefícios de CollectionView, pois tem mais flexibilidade.

Matthew Cawley
fonte
2

Ambos dependem dos requisitos. As visualizações de tabela também oferecem suporte para uma variedade de cenários de edição. Este suporte não foi implementado nas classes Collection View. Se você estiver convertendo a partir de uma Visualização de Tabela que depende desses métodos, espere fazer um trabalho pesado extra na Visualização de Coleção. Os cabeçalhos de seção da Visualização da coleção podem ser colocados em qualquer lugar da visualização. e UITableView não precisa definir botões com tags ou outras coisas obtendo valores de itens selecionados.

Bhumesh Purohit
fonte
1

Na prática, todo mundo usa UICollectionView que eu encontrei, quando eles só precisam de um UITableView. "É unidimensional. Ele sobe e desce. Por que você está adicionando métodos de delegação desnecessários para layout E dados?". Certa vez, passei 2 horas extras ajudando uma startup a descobrir por que seu UICollectionViewCell foi esmagado porque o proprietário, que não leu o manual de Animações, nem HIG, nem o guia UICollectionView, decidiu usá-lo e adicionar alturas e animes variáveis. Desnecessário dizer que ele deu a si mesmo uma dor de cabeça e muito tempo perdido em um problema não crítico para os negócios que poderia ter evitado simplesmente usando uma célula de tabela, já que não há delegado de layout extra + Nib.

Deixe-me ver se entendi, eu sou totalmente favorável ao UICollectionView quando seus dados e display precisam deles. Eles são muito poderosos. Mas, na prática, a maioria das pessoas que conheço os usa em listas.

Isso traz outra falha. Eles também são usados ​​em listas curtas e constantes que nunca mudarão. Nesse caso, basta fazer um Xib. Ou escreva uma visualização personalizada que os empilhe. Por quê? Porque você não precisa do gerenciamento de memória para 5 conjuntos de etiquetas com um botão ou interruptor. Se eles podem mudar, então sim, use uma lista. Se você quer física, então UICollectionView funciona bem com alguns efeitos legais. Mas você realmente precisa adicionar 5 métodos de delegação e um sistema de layout para 5 rótulos que nunca serão movidos?

Além disso, não estou esquecendo que o iOS agora também tem uma visão de empilhamento nativa. Nunca consigo fazer com que ele se deforme como quero, embora seja bastante adepto dos sistemas 2D e de animação, então nunca uso o integrado.

Tudo o que estou dizendo é, defina seus requisitos. Talvez você não precise de nenhum desses, se sua IU não estiver adicionando / removendo itens e se atualizando. Ou talvez você queira escrever um jogo de cartas e jogá-los virtualmente sobre uma mesa e, em seguida, usar UICollectionView com um sistema de física como guia de layout.

Stephen J
fonte
0

Com base em nossa necessidade, estamos escolhendo TableView ou CollectionView.

Exemplo:

Para contatos telefônicos, o tableView é a melhor opção.

Para a galeria de fotos, a visualização da coleção será a melhor opção.

Ramdhas
fonte
7
Embora eu concorde, a maneira como isso foi colocado parece mais uma opinião e acho que deveria ser apenas um comentário, não uma resposta.
Popeye de
0

Eu tive esse problema no meu projeto atual. Qual usar. No meu caso era realmente simples. Eu precisava de ambos. Eu precisava que minha visão fosse semelhante a UITableView e também para alterar sua mudança / layout. Então, UICollectionView foi usado. Também uso UITableView em todos os lugares em que não preciso de personalização extra. Como UiTableView vem com um layout padrão que inclui imagens e texto - eu o uso para simplificar.

Robert J. Clegg
fonte
0

Com base em nossos requisitos, escolhemos a visualização UITableView ou UICollection.

Se quisermos exibir imagens ou itens no tipo grade ou se precisarmos de mais personalização, usamos UICollectionview.

Para listar cada item com detalhes e subdetalhes, usamos UITableView.

UICollectionView: A classe UICollectionView gerencia uma coleção ordenada de itens de dados e os apresenta usando layouts personalizáveis. As visualizações de coleção fornecem a mesma função geral que as visualizações de tabela, exceto que uma visualização de coleção é capaz de suportar mais do que apenas layouts de coluna única.

UITableView: uma visualização de tabela exibe uma lista de itens em uma única coluna. UITableView é uma subclasse de UIScrollView, que permite aos usuários rolar pela tabela, embora UITableView permita apenas a rolagem vertical.

firoz khan
fonte
0

De acordo com minha visão para exibição em grade, use a exibição de coleção de IU. Todas as outras exibições de lista usam a exibição UITable

Subathra D
fonte
0

Pessoalmente, acho que o UICollectionView pode fazer a maior parte do trabalho que o UITableview pode fazer. bem, ao mesmo tempo, é mais complexo de usar.

Eu sugiro que você use UICollectionView como TableView apenas no caso de seu gerente alterar os requisitos no futuro.

Qi Li
fonte