Kiedy używać UICollectionView zamiast UITableView?

93

Okazało się, że UICollectionViewjest to ulepszona wersja UITableViewwprowadzona w iOS6, ale kiedy powinienem wybrać UICollectionViewzamiast UITableView?

Aplikacje nadal używają UITableView, jeśli UICollectionViewcoś UITableViewmoże zrobić, dlaczego ludzie nadal używają UITableView? Czy jest różnica, jeśli chodzi o wydajność?

Dzięki!

wz366
źródło

Odpowiedzi:

75

To zależy od wymagań. Sposób przepływu aplikacji określa typ interfejsu użytkownika do zintegrowania z aplikacją.

Ludzie używają głównie UICollectionviewdo tworzenia typów interfejsów użytkownika z wieloma obrazami wyświetlanymi w siatce. Wymagałoby to skomplikowanej logiki UITableView, ale przy użyciu UICollectionviewbyłoby łatwe.

Podczas używania UICollectionviewnie musisz ustawiać przycisków z tagami lub innymi rzeczami, pobierając wybrane wartości elementów. Możesz po prostu wejść -(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPathi wejść UITableViewDelegate:

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

Otrzymujesz wybrany wiersz zamiast elementu, więc do tworzenia siatki lub zmodyfikowanych elementów UICollectionviewnajlepiej jest użyć .

W przypadku szczegółów aukcji każdego przedmiotu ludzie używają, UITableViewponieważ pokazuje więcej informacji na temat każdego przedmiotu.

Dokumenty Apple:

Odwołanie do klasy UICollectionView

Klasa UICollectionView zarządza uporządkowaną kolekcją elementów danych i przedstawia je przy użyciu dostosowywalnych układów. Widoki kolekcji zapewniają tę samą ogólną funkcję, co widoki tabeli, z tą różnicą, że widok kolekcji może obsługiwać więcej niż tylko układy jednokolumnowe. Widoki kolekcji obsługują konfigurowalne układy, których można używać do implementowania siatek wielokolumnowych, układów kafelkowych, układów kołowych i wielu innych. Jeśli chcesz, możesz nawet dynamicznie zmieniać układ widoku kolekcji.

Odwołanie do klasy UITableView

Widok tabeli wyświetla listę elementów w jednej kolumnie. UITableView jest podklasą UIScrollView, która umożliwia użytkownikom przewijanie tabeli, chociaż UITableView umożliwia tylko przewijanie w pionie. Komórki zawierające poszczególne elementy tabeli to obiekty UITableViewCell; UITableView używa tych obiektów do rysowania widocznych wierszy tabeli. Komórki mają zawartość - tytuły i obrazy - i mogą mieć, blisko prawej krawędzi, dodatkowe widoki. Standardowe widoki akcesoriów to wskaźniki ujawniania lub przyciski ujawniania szczegółów; pierwsza prowadzi do następnego poziomu w hierarchii danych, a druga prowadzi do szczegółowego widoku wybranej pozycji. Widoki akcesoriów mogą również być kontrolkami struktury, takimi jak przełączniki i suwaki, lub mogą być widokami niestandardowymi. Widoki tabeli mogą wejść w tryb edycji, w którym użytkownicy mogą wstawiać, usuwać i zmieniać kolejność wierszy tabeli.

Nitin Gohel
źródło
3
Myślę, że w kategoriach rozszerzalności - widok kolekcji osiąga lepsze wyniki !!
thatzprem
Zastanawiam się, dlaczego kiedykolwiek trzeba używać widoku tabeli, skoro widok kolekcji może zaspokoić wszystkie potrzeby bez dodatkowej złożoności, ale zapewnia elastyczność (jeśli klient kiedykolwiek będzie musiał rozszerzyć układ na więcej niż jedną kolumnę, byłoby to całkiem proste, aby to zrobić z widokiem kolekcji ). Zawsze domyślnie korzystałem z podglądów tabel, ale teraz wątpię, czy ma to sens, aby zamiast tego przełączyć się na widoki kolekcji. Czy coś mi brakuje?
nami
wszystko w oparciu o główne wymagania. Widok kolekcji wprowadza późno i do tego czasu wszyscy deweloperzy używają tabeli do tworzenia siatki i tego typu rzeczy. ale teraz widok kolekcji dni jest najczęściej używany do tworzenia układu, takiego jak widok tabeli. jak dobrze więc nie sądzę że jego zły pomysł, aby korzystać collectionviews
Nitin Gohel
Dziękuję za wyjaśnienie.
ssowri1
48

Oto moje kryteria:

  • Jeśli UITableView może to zrobić, użyj go

  • Jeśli UITableView wymaga do tego dużej ilości kodu lub w ogóle nie może tego zrobić, użyj UICollectionView.

Przed podjęciem decyzji należy wziąć pod uwagę ograniczenia dotyczące UITableView: jest to pojedyncza kolumna. Możesz dostosowywać tylko komórki, ale nie tła sekcji i tym podobne. Więc jeśli masz prostą listę rzeczy bez dodatkowych dodatków - w zasadzie wygląda to jak standardowy widok na torfowiska iOS - użyj UITableview. Jeśli masz niestandardowe wstawki lub obramowanie wokół każdej sekcji, użyj UICollectionView.

Właściwie rozważam UICollectionView dla wszystkich rzeczy po prostu dlatego, że jest to bardzo kosztowne, gdy zaczynasz tworzyć widok jako widok tabeli, a później okazuje się, że nie może zrobić tej jednej rzeczy, której potrzebujesz. Doświadczenie z pierwszej ręki;)

Edytuj po jeszcze większym doświadczeniu z dwoma: zignoruj ​​ostatni akapit. UICollectionView wymaga dużej ilości kodu standardowego, aby działał jak UITableView. Używaj UICollectionView tylko wtedy, gdy jest to naprawdę potrzebne. ;)

n13
źródło
3
Doskonała odpowiedź, której szukałem! To powinno być głosowane więcej!
rak appdev
2
Ujawnienie osobistych doświadczeń i rekomendacji jest bardzo pomocne!
aero
1
Zdecydowanie zachichotałem czytając to, dobrze powiedziane! UITableView jest tak samo konfigurowalny, jak wszystko, z wyjątkiem tego, że ulegnie awarii, jeśli dodasz animacje, które przesuną kolejkowanie. Poleciłbym odpowiedź, aby przejść do przewodnika Animacje i trochę poszperać, aby osobiście dowiedzieć się, ile istnieje wewnętrznych widoków, aby można je było odświeżyć, a problem „Nie mogę uczynić linii separatora niewidocznymi”, który ostatecznie znajdziesz, nie będzie zaskoczeniem ktoś. Ukryte widoki w Scrollview, UIButton i Tableview rzucać najwięcej dostosowania się aż wiesz, że są ukryte w rzeczach
Stephen J
33

Aby uzyskać proste listy i nawigację do przodu / do tyłu, użyj UITableView.

Jeśli potrzebujesz wysokiego stopnia dostosowania, użyj UICollectionView.

Ogólnie mówiąc, w tworzeniu oprogramowania najlepiej jest wybrać podejście, które reprezentuje „Najprostszą możliwą rzecz”.

EDYCJA: Od iOS 14 UICollectionViewmożna teraz również tworzyć listy i jest teraz zalecanym podejściem. Zobacz tę sesję z WWDC20, aby uzyskać więcej informacji i szczegółów implementacji: https://developer.apple.com/videos/play/wwdc2020/10026/

Andrew Ebling
źródło
14

Z mojego punktu widzenia główna różnica między collectionView i tableView polega na tym

TABLEVIEW -> pokaż listę pozycji tylko w jednej kolumnie.

WIDOK KOLEKCJI -> pokaż listę pozycji w wielu kolumnach.

Mam nadzieję, że to ci pomoże.

Muhammad Waqas Bhati
źródło
11

Jeśli wybierzesz UITableView na iPhone'a, upewnij się, że najpierw rozważyłeś swoją strategię dotyczącą iPada. Jeśli chcesz mieć układ specyficzny dla iPada, możesz chcieć, aby ten układ jednokolumnowy stał się siatką.

BricoleurDev
źródło
8

Chociaż nie jest to wymagane, zawsze używam widoku kolekcji. W ten sposób mogę łatwo dostosować sposób prezentacji moich kolekcji do różnych rozdzielczości. Zaletą jest to, że jest gotowy do szybkiego dodawania nowych typów komórek podczas refaktoryzacji w przyszłości.

Nie widzę sensu widoków na stół. Używanie widoku kolekcji do reprezentowania tabeli jest bardzo proste. IMO.

Chris Van Buskirk
źródło
4

Jest to całkowicie zależne od sposobu wyświetlania danych. Jak wspomniało wielu powyżej, jeśli potrzebujesz tylko jednego zestawu danych, a to nie jest zbyt skomplikowane, użyj UITableViewinnego UICollectionView.

UICollectionView jest przyjazny dla personalizacji.

Jeśli masz do czynienia z wieloma wysokościami komórek, przejdź do UICollectionView.

łamacz myśli
źródło
4

Z mojego osobistego doświadczenia wynika, że ​​te dwa elementy należy porównywać tylko luźno.

TableView

TableView to element interfejsu użytkownika przeznaczony do wyświetlania danych w formacie listy. Istnieją pewne funkcje, które są standardowo dostarczane z UITableView, takie jak:

  • Widok akcesoriów
  • Styl wyboru komórki
  • Edycja stylu (przyciski usuwania i edycji).

Powyższe elementy zwiększają użyteczność danych podczas wyświetlania i interakcji w formacie listy. Na przykład przeglądanie e-maili.

CollectionView

CollectionView to element interfejsu użytkownika przeznaczony do wyświetlania zawartości przy użyciu układu niestandardowego (zwykle wszystko, co nie jest listą). CollectionViews poprawia funkcjonalność wyświetlania danych w całkowicie dostosowanych stylach układu, a także dynamicznie zmieniających się układów w locie. Oto kilka przykładów:

  • Listy horyzontalne
  • Galerie zdjęć
  • Widoki miniatur
  • Karuzele
  • Tarcze
  • Rozplanowanie elementów na mapie
  • itp.

CollectionViews pozwala również na wiele wyborów.

Wniosek

Jak widać z powyższego, oba mają zupełnie inne przypadki użycia i są przeznaczone do ulepszania rozwoju i użyteczności własnych, specyficznych zestawów danych.

Jeśli patrzysz na wyświetlanie czegokolwiek w stylu listy z następującymi interakcjami: - Dodawanie - Usuwanie - Ponowne zamawianie Następnie UITableView uprości ten proces, zapewniając wsparcie od razu po wyjęciu z pudełka.

Cokolwiek innego, powinieneś wykorzystać zalety CollectionView, ponieważ masz większą elastyczność.

Matthew Cawley
źródło
2

Obie zależą od wymagań. Widoki tabeli obsługują również różne scenariusze edycji. Ta obsługa nie została zaimplementowana w klasach widoku kolekcji. Jeśli konwertujesz z widoku tabeli, który opiera się na tych metodach, spodziewaj się nieco dodatkowego podnoszenia ciężarów w widoku kolekcji. Nagłówki sekcji widoku kolekcji można umieszczać w dowolnym miejscu w widoku. i UITableView nie muszą ustawiać przycisków z tagami ani innymi rzeczami, pobierając wybrane wartości elementów.

Bhumesh Purohit
źródło
1

W praktyce każdy używa UICollectionView, z którym się spotkałem, gdy potrzebuje tylko UITableView. „Jest jednowymiarowy. Przesuwa się w górę iw dół. Dlaczego dodajesz niepotrzebne metody delegatów dla układu ORAZ danych?”. Kiedyś spędziłem dodatkowe 2 godziny, pomagając startupowi dowiedzieć się, dlaczego ich UICollectionViewCell został zgnieciony, ponieważ właściciel, który nie przeczytał podręcznika Animations, HIG, ani przewodnika UICollectionView, zdecydował się go użyć i dodać zmienne wysokości i animacje. Nie trzeba dodawać, że przyprawił go o ból głowy i dużo straconego czasu na kwestię niekrytyczną dla biznesu, której mógł uniknąć, po prostu używając komórki tabeli, ponieważ nie ma dodatkowego delegata układu + stalówki.

Pozwól, że zrozumiem, jestem za UICollectionView, gdy Twoje dane i wyświetlacz tego potrzebują. Są bardzo potężne. Ale w praktyce większość ludzi, których widziałem, używa ich na listach.

To pociąga za sobą kolejną wadę. Są również używane na krótkich, stałych listach, które nigdy się nie zmienią. W takim przypadku po prostu utwórz plik Xib. Lub napisz widok niestandardowy, który je zestawi. Czemu? Ponieważ nie potrzebujesz zarządzania pamięcią dla 5 zestawów etykiet za pomocą przycisku lub przełącznika. Jeśli mogą się zmienić, to tak, użyj listy. Jeśli chcesz fizyki, UICollectionView działa dobrze z kilkoma fajnymi efektami. Ale czy naprawdę musisz dodać 5 metod delegatów i system układu dla 5 etykiet, które nigdy się nie poruszą?

Nie zapominam też, że iOS ma teraz również natywny widok stosu. Nigdy nie mogę zdeformować tego, jak chcę, mimo że jestem dość biegły w systemach 2D i animacji, więc nigdy nie używam wbudowanego.

Mówię tylko, określ swoje wymagania. Może nie potrzebujesz żadnego z nich, jeśli twój interfejs użytkownika nie dodaje / nie usuwa elementów i nie odświeża się. A może chcesz napisać grę karcianą i wyrzucić ją wirtualnie na stół, a następnie użyć UICollectionView z systemem fizyki jako przewodnika po układzie.

Stephen J.
źródło
0

W oparciu o naszą potrzebę wybieramy TableView lub CollectionView.

Przykład:

W przypadku kontaktów telefonicznych najlepszą opcją jest tableView.

W przypadku galerii zdjęć najlepszą opcją będzie widok kolekcji.

Ramdhas
źródło
7
Chociaż zgadzam się, że sposób, w jaki to zostało sformułowane, wydaje się bardziej opinią i myślę, że powinien to być tylko komentarz, a nie odpowiedź.
Popeye
0

Miałem ten problem w moim obecnym projekcie. Którego użyć. W moim przypadku było to naprawdę proste. Potrzebowałem obu. Potrzebowałem mojego widoku, aby wyglądał jak UITableView, a także aby zmienić jego zmianę / układ. Tak więc użyto UICollectionView. Używam również UITableView wszędzie, gdzie nie potrzebuję żadnych dodatkowych dostosowań. Ponieważ UiTableView ma domyślny układ, który zawiera obrazy i tekst - używam go dla uproszczenia.

Robert J. Clegg
źródło
0

W oparciu o nasze wymagania wybieramy widok UITableView lub UICollection.

Jeśli chcemy wyświetlać obrazy lub przedmioty w typie siatki lub jeśli potrzebujemy więcej możliwości dostosowywania, używamy UICollectionview.

Aby wyświetlić każdy element ze szczegółami i szczegółami podrzędnymi, używamy UITableView.

UICollectionView: Klasa UICollectionView zarządza uporządkowaną kolekcją elementów danych i przedstawia je przy użyciu dostosowywalnych układów. Widoki kolekcji zapewniają tę samą ogólną funkcję, co widoki tabeli, z tą różnicą, że widok kolekcji może obsługiwać więcej niż tylko układy jednokolumnowe.

UITableView: widok tabeli wyświetla listę elementów w jednej kolumnie. UITableView jest podklasą UIScrollView, która umożliwia użytkownikom przewijanie tabeli, chociaż UITableView umożliwia tylko przewijanie w pionie.

firoz khan
źródło
0

Zgodnie z moim widokiem dla widoku siatki użyj widoku kolekcji interfejsu użytkownika, a wszystkie inne widoki listy używają widoku UITable

Subathra D
źródło
0

Osobiście uważam, że UICollectionView może wykonać większość pracy, którą może wykonać UITableview. cóż, jednocześnie jest bardziej skomplikowany w użyciu.

Sugeruję użycie UICollectionView jako TableView na wypadek, gdyby menedżer zmienił wymagania w przyszłości.

Qi Li
źródło