【问题标题】:When to use UICollectionView instead of UITableView?何时使用 UICollectionView 而不是 UITableView?
【发布时间】:2014-05-29 12:28:48
【问题描述】:

我发现UICollectionView就像是iOS6中引入的UITableView的升级版,但是什么时候应该选择UICollectionView而不是UITableView呢?

还有应用程序使用UITableView,如果UICollectionView可以做任何事情UITableView可以做,为什么人们仍然使用UITableView?就性能而言有区别吗?

谢谢!

【问题讨论】:

    标签: ios objective-c uitableview uicollectionview


    【解决方案1】:

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

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

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

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

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

    对于每件商品的详情,人们使用UITableView,因为它显示了每件商品的更多信息。

    Apple 文档:

    UICollectionView Class Reference

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

    UITableView Class Reference

    表格视图在单个列中显示项目列表。 UITableView 是 UIScrollView 的子类,它允许用户滚动表格,虽然 UITableView 只允许垂直滚动。包含表格各个项目的单元格是 UITableViewCell 对象; UITableView 使用这些对象来绘制表格的可见行。单元格有内容——标题和图像——并且可以在靠近右边缘的地方有辅助视图。标准附件视图是披露指示器或细节披露按钮;前者通向数据层次结构的下一级,后者通向选定项目的详细视图。辅助视图也可以是框架控件,例如开关和滑块,也可以是自定义视图。表格视图可以进入编辑模式,用户可以在其中插入、删除和重新排序表格的行。

    【讨论】:

    • 我认为在可扩展性方面 - 收藏视图得分更高!!
    • 我想知道为什么当collectionview可以满足所有需求而不增加复杂性但提供灵活性时为什么需要使用tableview(如果客户需要将布局扩展到一列以上,那将是使用collectionview 非常简单)。我一直默认使用 tableviews,但现在我怀疑切换到 collectionviews 是否有意义。我错过了什么吗?
    • 这一切都基于主要要求。集合视图引入较晚,直到那时所有开发人员都使用表格来制作网格之类的东西。但现在一天collectionview最流行用于制作像tableview这样的布局。同样,我不认为使用 collectionviews 是个坏主意
    • 感谢您的解释。
    【解决方案2】:

    这是我的标准:

    • 如果 UITableView 可以做到,就用它

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

    在做出决定之前,您必须考虑对 UITableView 的限制:它是单列。而且您只能自定义单元格,但不能自定义部分背景等。因此,如果您有一个没有多余装饰的直接列表 - 基本上看起来像一个沼泽标准 iOS 视图 - 然后使用 UITableview。如果您有自定义插图或每个部分的边框,请使用 UICollectionView。

    我实际上正在考虑所有事情的 UICollectionView,因为当您开始将视图开发为表格视图时它非常昂贵,然后发现它不能做您需要它做的那件事。第一手经验;)

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

    【讨论】:

    • 我正在寻找的完美答案!这应该被更多投票!
    • 公开你的个人经历和建议很有帮助!
    • 读到这里我肯定笑了,说得好! UITableView 与任何东西一样可定制,但如果您添加抵消排队的动画,它会崩溃。我建议您使用动画指南来回答,并进行一些挖掘以亲自了解存在多少内部视图以便您可以刷新它们,并且您最终发现的“我无法使分隔线不可见”问题不会令人惊讶任何人。 scrollView、UIButton 和 tableView 中的隐藏视图会关闭大多数自定义项,直到您知道它们隐藏在事物中
    【解决方案3】:

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

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

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

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

    【讨论】:

      【解决方案4】:

      根据我的观点,collectionView 和 tableView 的主要区别在于

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

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

      希望对你有帮助。

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

          虽然不是必需的,但我总是使用集合视图。这样我就可以轻松地调整我的收藏品的呈现方式以适应不同的分辨率。一个优点是它可以在未来重构时快速添加新类型的单元格。

          我看不到 tableviews 的意义。使用集合视图来表示表格非常简单。国际海事组织。

          【讨论】:

            【解决方案7】:

            这完全取决于您的数据如何显示。 正如上面许多人所提到的,如果您只需要一组数据并且不太复杂,请选择UITableView,否则请使用UICollectionView

            UICollectionView 是自定义友好的。

            如果您要处理多个单元格高度左右,请选择UICollectionView

            【讨论】:

              【解决方案8】:

              根据我的个人经验,这两个元素只能进行松散的比较。

              表格视图

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

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

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

              CollectionView

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

              • 水平列表
              • 相册
              • 缩略图视图
              • 轮播
              • 拨号
              • 在地图上布置元素

              CollectionViews 也允许多选。

              结论

              从上面可以看出,两者都有完全不同的用例,旨在增强各自特定数据集的开发和可用性。

              如果您希望通过以下交互以列表样式显示任何内容: - 添加 - 删除 - 重新订购 然后 UITableView 将通过提供直接开箱即用的支持来简化此过程。

              除此之外,您应该利用 CollectionView 的优势,因为您拥有更大的灵活性。

              【讨论】:

                【解决方案9】:

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

                【讨论】:

                  【解决方案10】:

                  在实践中,每个人都使用我遇到的 UICollectionView,而他们只需要一个 UITableView。 “它是一维的。它会上升和下降。为什么要为布局和数据添加不必要的委托方法?”。我曾经多花 2 个小时帮助一家初创公司找出为什么他们的 UICollectionViewCell 会被压扁,因为没有阅读动画手册、HIG 或 UICollectionView 指南的所有者决定使用它并添加可变高度和动画。不用说,由于没有额外的布局委托 + Nib,他本可以通过简单地使用表格单元格避免的非关键业务问题让自己头疼并浪费了很多时间。

                  让我直截了当,当您的数据和显示需要它时,我完全支持 UICollectionView。他们非常强大。但实际上,我见过的大多数人都在列表中使用它们。

                  这带来了另一个缺陷。它们也用于永远不会改变的简短、恒定的列表。在这种情况下,只需制作一个 Xib。或者编写一个自定义视图来堆叠它们。为什么?因为您不需要一个按钮或开关的 5 组标签的内存管理。如果他们可能会改变,那么是的,使用一个列表。如果你想要物理,那么 UICollectionView 可以很好地配合一些很酷的效果。但是你真的需要为 5 个永远不会移动的标签添加 5 个委托方法和一个布局系统吗?

                  另外,我没有忘记 iOS 现在也有原生堆叠视图。尽管我非常擅长 2D 和动画系统,但我永远无法让它按照我的意愿变形,所以我从不使用内置的。

                  我的意思是,定义您的要求。如果您的 UI 没有添加/删除项目并自行刷新,那么您可能不需要其中任何一个。或者,也许您想编写一个纸牌游戏并将它们虚拟地扔到桌子上,然后使用带有物理系统的 UICollectionView 作为其布局指南。

                  【讨论】:

                    【解决方案11】:

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

                    我建议你使用 UICollectionView 作为 TableView,以防你的经理将来改变需求。

                    【讨论】:

                      【解决方案12】:

                      根据我们的需要,我们选择 TableView 或 CollectionView。

                      例子:

                      对于电话联系人,tableView 是最佳选择。

                      对于照片库,收藏视图将是最佳选择。

                      【讨论】:

                      • 虽然我同意这种说法似乎更像是一种观点,但我认为它应该只是评论而不是答案。
                      【解决方案13】:

                      我在当前的项目中遇到了这个问题。使用哪个。就我而言,这真的很简单。我两个都需要。我需要我的视图看起来像 UITableView 并且还需要更改它的更改/布局。因此,使用了 UICollectionView。我也在不需要任何额外定制的地方使用 UITableView。由于 UiTableView 带有包含图像和文本的默认布局 - 为了简单起见,我使用它。

                      【讨论】:

                        【解决方案14】:

                        根据我们的要求,我们选择 UITableView 或 UICollection 视图。

                        如果我们想以网格类型显示图像或项目,或者如果我们需要更多可定制性,我们使用 UICollectionview。

                        为了列出每个项目的详细信息和子详细信息,我们使用 UITableView。

                        UICollectionView: UICollectionView 类管理有序的数据项集合并使用可自定义的布局呈现它们。集合视图提供与表视图相同的通用功能,只是集合视图能够支持的不仅仅是单列布局。

                        UITableView:表格视图在单个列中显示项目列表。 UITableView 是 UIScrollView 的子类,它允许用户滚动表格,虽然 UITableView 只允许垂直滚动。

                        【讨论】:

                          【解决方案15】:

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

                          【讨论】:

                            猜你喜欢
                            • 1970-01-01
                            • 1970-01-01
                            • 2015-06-16
                            • 2018-06-15
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 2015-12-28
                            • 2021-11-30
                            相关资源
                            最近更新 更多