Когда использовать UICollectionView вместо UITableView?


94

Я обнаружил, что 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

все это основано на главном требовании. Представление коллекции вводится поздно, а до тех пор все разработчики используют таблицу для создания сетки и тому подобного. но теперь для создания макета, такого как tableview, наиболее популярно использование days collectionview. также, так что я не думаю, что использование
Нитин

Спасибо за ваше объяснение.
ssowri1 02

48

Вот мои критерии:

  • Если UITableView может это сделать, используйте его

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

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

На самом деле я рассматриваю UICollectionView для всех вещей просто потому, что это очень дорого, когда вы начинаете разрабатывать свое представление в виде табличного представления, а потом выясняете, что он не может сделать то единственное, что вам нужно. 1-й опыт;)

Отредактируйте после еще большего опыта с двумя: не обращайте внимания на последний абзац. UICollectionView требует большого количества шаблонного кода, чтобы он работал как UITableView. Используйте UICollectionView только тогда, когда это действительно необходимо. ;)


3
Идеальный ответ, который я искал! За это нужно проголосовать больше!
rak appdev

2
Очень полезно поделиться своим личным опытом и рекомендациями!
aero

1
Я определенно усмехнулся, читая это, хорошо сказано! UITableView настраивается так же, как и все остальное, за исключением того, что он выйдет из строя, если вы добавите анимацию, которая компенсирует очередь. Я бы порекомендовал ваш ответ пойти с руководством по анимации и немного покопаться, чтобы лично узнать, сколько существует внутренних представлений, чтобы вы могли их обновить, и проблема «Я не могу сделать линию разделителя невидимой», которую вы в конечном итоге обнаружите, не удивит кто угодно. Скрытые представления в scrollView, UIButton и tableView отбрасывают большинство настроек до тех пор, пока вы не узнаете, что они скрыты в вещах
Стивен Дж.

33

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

Если вам нужна высокая степень настраиваемости, используйте UICollectionView.

Вообще говоря, при разработке программного обеспечения лучше всего выбирать подход, который представляет собой «Простейший возможный шаг».

РЕДАКТИРОВАТЬ: Начиная с iOS 14, UICollectionViewтеперь можно делать списки, и теперь это рекомендуемый подход. См. Этот сеанс на WWDC20 для получения дополнительной информации и деталей реализации: https://developer.apple.com/videos/play/wwdc2020/10026/


14

Согласно моей точке зрения, основное различие между collectionView и tableView заключается в том, что

TABLEVIEW -> показать список элементов только в одном столбце.

КОЛЛЕКЦИЯ-ПРОСМОТР -> показать список элементов в нескольких столбцах.

Надеюсь, это поможет тебе.


11

Если вы выбрали UITableView для iPhone, убедитесь, что вы сначала продумали свою стратегию для iPad. Если вам нужен макет для iPad, вы можете захотеть, чтобы этот макет с одним столбцом превратился в сетку.


8

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

Я не вижу смысла в просмотрах таблиц. Представление коллекции очень просто использовать для представления таблицы. ИМО.


4

Это полностью зависит от того, как будут отображаться ваши данные. Как уже упоминалось многими выше, если вам нужен только один набор данных, и это тоже несложно, UITableViewиспользуйте else UICollectionView.

UICollectionView удобна для настройки.

Если вы имеете дело с несколькими высотами ячеек или около того, тогда действуйте UICollectionView.


4

По моему личному опыту, эти два элемента следует сравнивать только небрежно.

TableView

TableView - это элемент пользовательского интерфейса, предназначенный для отображения данных в формате списка. Есть определенные функции, которые входят в стандартную комплектацию UITableView, например:

  • Аксессуар Вид
  • Стиль выделения ячейки
  • Редактирование стиля (кнопки удаления и редактирования).

Вышеупомянутые элементы повышают удобство использования данных при отображении и взаимодействии в формате списка. Например, просмотр писем.

CollectionView

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

  • Горизонтальные списки
  • Фотогалереи
  • Миниатюры
  • Карусели
  • Циферблаты
  • Размещение элементов на карте
  • и т.п.

CollectionViews также допускает множественный выбор.

Вывод

Как видно из вышеизложенного, оба имеют совершенно разные варианты использования и предназначены для улучшения разработки и удобства использования собственных конкретных наборов данных.

Если вы хотите отобразить что-либо в стиле списка со следующими взаимодействиями: - Добавление - Удаление - Изменение порядка Затем UITableView упростит этот процесс, предоставив поддержку прямо из коробки.

В остальном вам следует воспользоваться преимуществами CollectionView, поскольку у вас больше гибкости.


2

Оба зависят от требований. Табличные представления также поддерживают множество сценариев редактирования. Эта поддержка не реализована в классах представления коллекции. Если вы выполняете преобразование из табличного представления, основанного на этих методах, ожидайте, что вам придется сделать небольшую дополнительную тяжелую работу в представлении коллекции. Заголовки разделов представления коллекции можно размещать в любом месте представления. и UITableView не нужно устанавливать кнопки с тегами или другими вещами, получая значения выбранных элементов.


1

На практике все используют UICollectionView, с которым я сталкивался, когда им нужен только UITableView. «Он одномерный. Он идет вверх и вниз. Почему вы добавляете ненужные методы делегирования для макета И данных?». Однажды я потратил дополнительные 2 часа, помогая стартапу выяснить, почему их UICollectionViewCell раздался, потому что владелец, который не читал ни руководство по анимации, ни HIG, ни руководство по UICollectionView, решил использовать его и добавить переменную высоту и анимацию. Излишне говорить, что у него разболелась голова и он потерял много времени из-за не критичной для бизнеса проблемы, которую он мог бы избежать, просто используя ячейку таблицы, поскольку нет дополнительного делегата макета + перо.

Позвольте мне прямо сказать, я полностью за UICollectionView, когда ваши данные и дисплей нуждаются в этом. Они очень сильные. Но на практике большинство людей, которых я видел, использовали их в списках.

Это вызывает еще один недостаток. Они также используются в коротких постоянных списках, которые никогда не изменятся. В этом случае просто создайте Xib. Или напишите собственный вид, который их складывает. Зачем? Потому что вам не нужно управление памятью для 5 наборов этикеток с помощью кнопки или переключателя. Если они могут измениться, то да, используйте список. Если вам нужна физика, то UICollectionView хорошо работает с некоторыми классными эффектами. Но действительно ли вам нужно добавить 5 методов делегата и систему макета для 5 меток, которые никогда не будут перемещаться?

Кроме того, я не забываю, что iOS теперь тоже имеет собственное представление стекирования. Мне никогда не удается заставить его деформироваться так, как я хочу, хотя я достаточно разбираюсь в 2D и анимационных системах, поэтому никогда не использую встроенную.

Все, что я говорю, это определите свои требования. Возможно, вам не нужно ни одно из них, если ваш пользовательский интерфейс не добавляет / не удаляет элементы и не обновляется. Или, может быть, вы хотите написать карточную игру и выбросить их виртуально на столе, а затем использовать UICollectionView с физической системой для ее руководства по макету.


0

Исходя из наших потребностей, мы выбираем TableView или CollectionView.

Пример:

Для телефонных контактов tableView - лучший вариант.

Для фотогалереи лучшим вариантом будет просмотр коллекции.


7
Хотя я согласен, то, как это было сказано, больше похоже на мнение, и я думаю, что это должен быть просто комментарий, а не ответ.
Popeye

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.