Коли використовувати UICollectionView замість UITableView?


92

Я виявив, що UICollectionViewце схоже на оновлену версію, UITableViewпредставлену в iOS6, але коли я повинен вибрати UICollectionViewзамість цього UITableView?

Є додатки UITableView, які все ще використовують , якщо UICollectionViewхтось UITableViewможе зробити, чому люди все ще користуються UITableView? Чи є різниця щодо продуктивності?

Дякую!

Відповіді:


75

Це залежить від вимог. Як потоки додатків визначають, який тип інтерфейсу потрібно інтегрувати в програму.

Люди в основному використовують UICollectionviewдля створення типів інтерфейсів із декількома зображеннями, показаними в сітці. Це мало б складну логіку UITableView, але з UICollectionviewцим це було б легко.

Під час використання UICollectionviewвам не потрібно встановлювати кнопки з тегами чи іншими речами, отримуючи значення вибраних елементів. Ви можете просто отримати -(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPathі UITableViewDelegate:

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

Ви отримуєте вибраний рядок замість елемента, тому для створення сітки або модифікованих елементів UICollectionviewнайкраще використовувати.

Для деталізації списку кожного елемента користувачі використовують, UITableViewоскільки в ньому відображається більше інформації про кожен товар.

Документи Apple:

Посилання на клас UICollectionView

Клас UICollectionView управляє упорядкованою колекцією елементів даних і представляє їх за допомогою настроюваних макетів. Представлення колекції забезпечують ту саму загальну функцію, що і подання таблиці, за винятком того, що подання колекції може підтримувати не лише макети з одним стовпцем. Перегляди колекцій підтримують настроювані макети, які можна використовувати для реалізації багатоколонних сіток, плиткових макетів, кругових макетів та багатьох інших. Ви навіть можете динамічно змінювати макет подання колекції, якщо хочете.

Довідник класу UITableView

У поданні таблиці відображається список елементів в одному стовпці. UITableView - це підклас UIScrollView, який дозволяє користувачам прокручувати таблицю, хоча UITableView дозволяє лише вертикальну прокрутку. Клітинки, що містять окремі елементи таблиці, є об’єктами UITableViewCell; UITableView використовує ці об’єкти для малювання видимих ​​рядків таблиці. Клітини мають вміст - заголовки та зображення - і можуть мати, біля правого краю, види аксесуарів. Стандартними видами аксесуарів є індикатори розкриття або кнопки розкриття деталей; перший веде до наступного рівня в ієрархії даних, а другий - до детального перегляду вибраного елемента. Представлення аксесуарів також можуть бути елементами управління, такими як перемикачі та повзунки, або можуть бути спеціальними поданнями. Представлення таблиць можуть перейти в режим редагування, де користувачі можуть вставляти, видаляти та впорядковувати рядки таблиці.


3
Я думаю з точки зору розширюваності - перегляд колекції набирає більше результатів !!
thatzprem

Мені цікаво, чому коли-небудь потрібно використовувати tableview, коли collectionview може задовольнити всі потреби без додаткової складності, але забезпечує гнучкість (якщо клієнту коли-небудь потрібно буде розширити макет до більш ніж одного стовпця, було б досить просто зробити це за допомогою collectionview ). Я завжди використовував табличні перегляди за замовчуванням, але тепер я сумніваюся, що це має сенс переходити до колекційних. Мені чогось не вистачає?
vir us

все це базується на основних вимогах. Перегляд колекції представити пізно і до того часу всі розробники використовують таблицю для створення сітки та подібних речей. але зараз колекція днів найпопулярніша для використання для створення макета, як таблиця. також я не думаю, що це погана ідея використовувати перегляди колекцій
Нітін Гогель

Дякую за пояснення.
ssowri1 02

47

Ось мої критерії:

  • Якщо UITableView може це зробити, використовуйте його

  • Якщо UITableView потребує багато коду для цього або взагалі не може зробити це, використовуйте UICollectionView.

Перш ніж приймати рішення, вам слід врахувати обмеження на UITableView: це одна колонка. І ви можете налаштувати лише клітинки, але не фони розділів тощо. Тож якщо у вас є прямий список речей без зайвих надмірностей - це, по суті, виглядає як болотний стандартний перегляд iOS - тоді використовуйте UITableview. Якщо у вас є власні вставки або межі навколо кожного розділу, використовуйте UICollectionView.

Я насправді розглядаю UICollectionView для всіх речей просто тому, що це дуже дорого, коли ви починаєте розробляти свій вигляд як подання таблиці, а потім пізніше з’ясовуєте, що він не може зробити того, що вам потрібно. Досвід першої руки;)

Редагуйте після ще більшого досвіду роботи з двома: Нехтуйте останнім абзацом. UICollectionView вимагає багато типового коду, щоб він працював як UITableView. Використовуйте UICollectionView лише тоді, коли це дійсно потрібно. ;)


3
Ідеальна відповідь, яку я шукав! За це слід голосувати більше!
rak appdev

2
Розкриття особистого досвіду та рекомендацій дуже корисно!
aero

1
Я точно засміявся, читаючи це, добре сказано! UITableView настільки ж настроюваний, як і будь-що інше, за винятком того, що він вийде з ладу, якщо ви додасте анімацію, яка компенсує чергу. Я б рекомендував вашу відповідь, скориставшись посібником з анімації, а також скористатися копанням, щоб особисто дізнатись, скільки внутрішніх переглядів існує, щоб ви могли їх оновити, і питання "Я не можу зробити роздільник рядком невидимим", яке ви врешті знайдете, не здивує будь-хто. Приховані види в scrollView, UIButton та tableView відкидають більшість налаштувань, поки не дізнаєтесь, що вони приховані в речах
Stephen J,

33

Для простих списків та навігації вперед / назад використовуйте UITableView.

Якщо вам потрібен високий ступінь настроюваності, використовуйте UICollectionView.

Взагалі кажучи, при розробці програмного забезпечення найкраще обрати підхід, який представляє "найпростішу можливу річ".

EDIT: станом на iOS 14, UICollectionViewтепер він також може робити списки, і зараз це рекомендований підхід. Дивіться цей сеанс з WWDC20 для отримання додаткової інформації та деталей реалізації: https://developer.apple.com/videos/play/wwdc2020/10026/


14

Згідно з моєю точкою зору, основна відмінність collectionView від tableView полягає в тому, що

TABLEVIEW -> показати список елементів лише в одному стовпці.

КОЛЕКЦІЯ-ПЕРЕГЛЯД -> показати список елементів у декількох стовпцях.

Сподіваюся, це допоможе вам.


11

Якщо ви вибрали UITableView для iPhone, переконайтеся, що спочатку розглянули стратегію iPad. Якщо ви хочете макет для iPad, ви можете хотіти, щоб макет з одним стовпцем став сіткою.


8

Хоча це не потрібно, я завжди використовую колекцію. Таким чином я можу легко адаптувати спосіб представлення моїх колекцій для різної роздільної здатності. Плюсом є те, що він готовий швидко додавати нові типи клітинок при рефакторингу в майбутньому.

Я не бачу сенсу переглядів таблиці. Дуже просто використовувати представлення колекції для представлення таблиці. ІМО.


4

Це повністю залежить від того, як відображатимуться ваші дані. Як згадувалося багатьма вище, якщо вам потрібен лише один набір даних і це теж не складно, перейдіть для UITableViewвикористання в іншому випадку UICollectionView.

UICollectionView є зручним для налаштування.

Якщо ви маєте справу з кількома висотами клітин або близько того, тоді йдіть на UICollectionView.


4

З мого особистого досвіду два елементи слід порівнювати лише безглуздо.

TableView

TableView - це елемент інтерфейсу, призначений для відображення даних у форматі списку. Існує певна функціональність, яка стандартно поставляється з UITableView, наприклад:

  • Вид аксесуарів
  • Стиль виділення комірки
  • Стиль редагування (кнопки видалення та редагування).

Вищезазначені елементи покращують зручність використання даних при відображенні та взаємодії у форматі списку. Такі як перегляд електронних листів.

CollectionView

CollectionView - це елемент інтерфейсу, призначений для показу вмісту за допомогою власного макета (зазвичай все, що не є списком). CollectionViews покращує функціональність відображення даних у повністю розроблених стилях макета, а також динамічно змінює макети на льоту. Деякі приклади:

  • Горизональні списки
  • Фотогалереї
  • Ескізи
  • Каруселі
  • Циферблати
  • Розкладка елементів на карті
  • тощо

CollectionViews також дозволяють робити кілька варіантів.

Висновок

Як видно з вищевикладеного, обидва мають абсолютно різні варіанти використання і призначені для посилення розвитку та зручності використання власних конкретних наборів даних.

Якщо ви хочете відобразити що-небудь у стилі списку з наступними взаємодіями: - Додавання - Видалення - Змінення порядку, тоді UITableView спростить цей процес, надаючи підтримку прямо з коробки.

У будь-якому іншому, ви повинні використовувати переваги CollectionView, оскільки у вас є більша гнучкість.


2

І те, і інше залежить від вимог. Представлення таблиць також мають підтримку різноманітних сценаріїв редагування. Ця підтримка не реалізована в класах колекційного подання. Якщо ви здійснюєте конвертацію з подання таблиці, яке покладається на ці методи, сподівайтесь зробити трохи зайвого підйому в поданні колекції. Заголовки розділів "Перегляд колекції" можна розміщувати в будь-якому місці перегляду. та UITableView не потрібно встановлювати кнопки з тегами чи іншими речами, отримуючи значення вибраних елементів.


1

На практиці всі використовують UICollectionView, з яким я стикався, коли їм потрібен лише UITableView. "Це одновимірно. Він рухається вгору і вниз. Чому ви додаєте непотрібні методи делегування для макета І даних?". Одного разу я витратив додаткові 2 години, допомагаючи стартапу з’ясувати, чому їх UICollectionViewCell зіпсувався, тому що власник, який не читав ні посібник з анімації, ні HIG, ні посібник UICollectionView, вирішив використовувати його та додати змінну висоту та анімацію. Що й казати, він завдав собі головного болю та багато втратив часу на не критичну для бізнесу проблему, якої міг уникнути, просто використовуючи комірку таблиці, оскільки немає додаткового делегата макета + Nib.

Дозвольте зрозуміти, я все за UICollectionView, коли ваші дані та дисплей потребують цього. Вони дуже потужні. Але на практиці більшість людей, яких я бачив, використовували їх у списках.

Це викликає ще один недолік. Вони також використовуються у коротких постійних списках, які ніколи не змінюватимуться. У цьому випадку просто зробіть Xib. Або напишіть власний вигляд, який їх складає. Чому? Оскільки вам не потрібно керувати пам’яттю для 5 наборів міток за допомогою кнопки або перемикача. Якщо вони можуть змінитися, тоді так, використовуйте список. Якщо вам потрібна фізика, тоді UICollectionView добре працює з деякими крутими ефектами. Але чи дійсно вам потрібно додати 5 методів делегування та систему макетування для 5 міток, які ніколи не рухатимуться?

Крім того, я не забуваю, що iOS також тепер має власний режим стекування. Я ніколи не можу змусити його деформуватись так, як я хочу, навіть незважаючи на те, що я цілком вправний у двовимірних та анімаційних системах, тому ніколи не використовую вбудовану.

Все, що я кажу, це визначте свої вимоги. Можливо, вам не потрібно жодного з них, якщо ваш інтерфейс не додає / видаляє елементи та не оновлюється. Або, можливо, ви хочете написати Картову гру і викинути їх практично на стіл, а потім скористайтеся UICollectionView з фізичною системою для її керівництва з макетування.


0

Виходячи з наших потреб, ми обираємо TableView або CollectionView.

Приклад:

Для телефонних контактів найкращим варіантом є tableView.

Для фотогалереї найкращим варіантом буде перегляд колекції.


7
Хоча я погоджуюсь з тим, як це було викладено, схоже на думку, і я думаю, що це повинен бути просто коментар, а не відповідь.
Попай

0

У мене було це питання у моєму поточному проекті. Який використовувати. У моєму випадку це було насправді просто. Мені потрібне було і те, і інше. Мені потрібен був мій вигляд, щоб виглядати як UITableView, а також змінювати його зміну / макет. Отже, був використаний UICollectionView. Я також використовую UITableView скрізь, де мені не потрібні додаткові настройки. Оскільки UiTableView постачається із типовим макетом, що включає зображення та текст, - я використовую його для простоти.


0

Виходячи з наших вимог, ми обираємо подання UITableView або UICollection.

Якщо ми хочемо відображати зображення або елементи у вигляді сітки або якщо нам потрібна більша настройка, ми використовуємо UICollectionview.

Для перерахування кожного елемента з деталями та деталями ми використовуємо UITableView.

UICollectionView: Клас UICollectionView управляє упорядкованою колекцією елементів даних і представляє їх за допомогою настроюваних макетів. Представлення колекції забезпечують ту саму загальну функцію, що і подання таблиці, за винятком того, що подання колекції може підтримувати не лише макети з одним стовпцем.

UITableView: подання таблиці відображає список елементів в одному стовпці. UITableView - це підклас UIScrollView, який дозволяє користувачам прокручувати таблицю, хоча UITableView дозволяє лише вертикальну прокрутку.


0

Відповідно до мого подання для дисплея Grid View використовуйте UI Collection View, а для всіх інших видів списку - UITable View


0

Особисто я думаю, що UICollectionView може виконати більшу частину роботи, яку може зробити UITableview. ну, водночас це більш складне використання.

Я пропоную використовувати UICollectionView як TableView на випадок, якщо ваш менеджер змінить вимоги в майбутньому.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.