什么时候使用UICollectionView代替UITableView?


92

我发现这就像是iOS6 UICollectionViewUITableView引入的升级版本,但是我应该何时选择UICollectionViewUITableView什么而不是?

仍然有应用在使用UITableView,如果UICollectionView能做任何事情UITableView都能做,为什么人们仍然使用UITableView?在性能方面有区别吗?

谢谢!

Answers:


75

这取决于要求。应用程序的流程方式决定了将哪种类型的UI集成到应用程序中。

人们主要使用UICollectionview来创建具有网格中显示的多个图像的UI类型。使用会产生复杂的逻辑UITableView,但是使用UICollectionview会很容易。

使用时UICollectionview,您不需要通过获取所选项目的值来设置带有标签或其他内容的按钮。您可以直接进入-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPathUITableViewDelegate

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

您将获得选定的行而不是项目,因此,对于创建网格或修改的项目,UICollectionview最好使用。

对于每个项目的列表详细信息,人们会使用UITableView它,因为它显示了每个项目的更多信息。

苹果文档:

UICollectionView类参考

UICollectionView类管理数据项的有序集合,并使用可自定义的布局来呈现它们。集合视图提供与表视图相同的常规功能,除了集合视图不仅可以支持单列布局,还可以支持更多的功能。集合视图支持可自定义的布局,可用于实现多列网格,平铺布局,圆形布局等。如果需要,您甚至可以动态更改集合视图的布局。

UITableView类参考

表格视图在单个列中显示项目列表。UITableView是UIScrollView的子类,尽管UITableView仅允许垂直滚动,但它允许用户滚动表。组成表格中各个项目的单元格是UITableViewCell对象;UITableView使用这些对象绘制表的可见行。单元具有内容(标题和图像),并且在右边缘附近可以具有附件视图。标准附件视图是公开指示符或详细信息公开按钮。前者导致数据层次结构中的下一个层次,而后者则导致所选项目的详细视图。辅助视图也可以是框架控件,例如开关和滑块,也可以是自定义视图。表格视图可以进入编辑模式,用户可以在其中插入,删除和重新排序表格的行。


3
我认为在可扩展性方面-集合视图得分更高!!
thatzprem 2014年

我想知道为什么当collectionview可以满足所有需求而又没有额外的复杂性却提供灵活性时,为什么需要使用tableview(如果客户曾经需要将布局扩展到多个列,那么使用collectionview这样做很简单)。我一直默认使用tableviews,但是现在我怀疑切换到collectionviews是否有意义。我想念什么吗?
vir我们

所有这些都是基于主要要求的。收集视图介绍得很晚,直到那时所有开发人员都使用表格来制作网格和类似的东西。但是现在有一天collectionview最常用于制作tableview之类的布局。同样,所以我认为使用collectionviews
并不是

谢谢你的解释。
ssowri1

45

这是我的标准:

  • 如果UITableView可以做到,请使用它

  • 如果UITableView需要大量代码来执行或根本无法执行,请使用UICollectionView。

在做出决定之前,您必须考虑对UITableView的限制:这是一列。而且,您只能自定义单元格,而不能自定义章节背景等。因此,如果您有简单明了的东西列表,基本上看起来像是沼泽标准的iOS视图,那么请使用UITableview。如果您有自定义插图或每个部分周围都有边框,请使用UICollectionView。

实际上,我正在考虑将UICollectionView用于所有事情,因为当您开始将视图开发为表视图时,它非常昂贵,后来发现它无法完成您需要做的一件事。第一手经验;)

在对这两者有更多的经验之后进行编辑:忽略最后一段。UICollectionView需要大量样板代码才能使其像UITableView一样工作。仅在确实需要时才使用UICollectionView。;)


3
我正在寻找的完美答案!这应该投票更多!
rak appdev '17

2
公开您的个人经历和建议非常有帮助!
Aero

1
我肯定笑了起来,说得好!UITableView和其他任何东西一样可自定义,除了如果添加偏移队列的动画会使其崩溃。我将建议您的答案与“动画”指南一起使用,并进行一些挖掘以亲自了解存在多少内部视图,以便您可以刷新它们,而最终发现的“我无法使分隔线不可见”的问题也就不足为奇了任何人。滚动视图,UIButton和表视图中的隐藏视图使大多数自定义设置无效,直到您知道它们隐藏在事物中为止
Stephen J

33

对于简单列表和前进/后退导航,请使用 UITableView

如果您需要高度的可定制性,请使用 UICollectionView

一般来说,在软件开发中,最好选择代表“最简单的事物”的方法。

编辑:从iOS 14开始,UICollectionView现在也可以执行列表,现在是推荐的方法。有关更多信息和实现细节,请参阅来自WWDC20的本次会议:https : //developer.apple.com/videos/play/wwdc2020/10026/


14

根据我的观点,collectionView和tableView之间的主要区别是

TABLEVIEW->仅在一列中显示项目列表。

COLLECTION-VIEW->在多列中显示项目列表。

希望对您有帮助。


11

如果选择iPhone的UITableView,请确保首先考虑了iPad策略。如果需要iPad特定的布局,则可能希望该单列布局成为网格。


8

尽管不是必需的,但我始终使用collectionview。这样,我可以轻松调整我的收藏集如何针对不同的分辨率呈现。一个优点是,它可以在将来进行重构时快速添加新类型的单元格。

我看不到任何表格视图。使用集合视图表示表非常简单。海事组织。


4

它完全取决于如何显示您的数据。如上文所述,如果您只需要一组数据而又不太复杂,请继续UITableView使用UICollectionView

UICollectionView 是定制友好的。

如果您要处理多个像元高度,请选择UICollectionView


4

根据我的个人经验,这两个要素只能比较松散地比较。

表格检视

TableView是一个UI元素,旨在以列表格式显示数据。UITableView具有某些标准功能,例如:

  • 附件视图
  • 单元格选择样式
  • 编辑样式(删除和编辑按钮)。

当以列表格式显示和交互时,上述元素增强了数据的可用性。例如查看电子邮件。

集合视图

CollectionView是一个UI元素,旨在使用自定义布局(通常是列表以外的任何内容)显示内容。CollectionViews改进了以完全定制的布局样式显示数据的功能,并且还可以动态地动态更改布局。一些例子是:

  • 水平清单
  • 照相馆
  • 缩略图视图
  • 轮播
  • 拨盘
  • 在地图上布置元素
  • 等等

CollectionViews还允许多个选择。

结论

从上面的内容中可以看到,这两个案例都有完全不同的用例,旨在增强其特定数据集的开发和可用性。

如果要通过以下交互方式以列表样式显示任何内容:-添加-删除-重新排序然后,UITableView通过直接提供支持来简化此过程。

在其他方面,您应该利用CollectionView的好处,因为它具有更大的灵活性。


2

两者都取决于要求。表格视图还支持多种编辑方案。在集合视图类中尚未实现此支持。如果要从依赖于这些方法的表视图进行转换,则应在“集合视图”中进行一些额外的繁重工作。集合视图部分标题可以放置在视图内的任何位置。和UITableView不需要通过获取选定项的值来设置带有标签或其他内容的按钮。


1

实际上,每个人都只需要一个UITableView时就使用我遇到的UICollectionView。“它是一维的。它会上下波动。为什么要为布局和数据添加不必要的委托方法?”。我曾经花了额外的2个小时来帮助一家初创企业找出为什么他们的UICollectionViewCell受到压榨,因为没有阅读动画手册,HIG或UICollectionView指南的所有者决定使用它并添加可变的高度和动画。不用说,他在一个非业务关键的问题上感到头疼,而且浪费了很多时间,他只需使用表格单元格就可以避免,因为没有多余的布局委托+ Nib。

让我说清楚,当您的数据和显示需要它时,我全都是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

根据我的网格视图显示视图,使用UI集合视图。所有其他列表视图使用UITable视图


0

我个人认为UICollectionView可以完成UITableview可以完成的大部分工作。好吧,与此同时,使用起来更复杂。

我建议您将UICollectionView用作TableView,以防万一您的经理将来更改要求。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.