UIScrollView 相对于 UITableView 和 UICollectionView 的优势
Posted
技术标签:
【中文标题】UIScrollView 相对于 UITableView 和 UICollectionView 的优势【英文标题】:Advantage of UIScrollView over UITableView and UICollectionView 【发布时间】:2016-05-05 10:12:23 【问题描述】:我正在开发一个 MAC 工具,您可以在其中查看 ios 应用程序的当前视图控制器 UIElements
层次结构。我曾经用很多第三方应用程序对其进行测试。据我所知,大多数时间开发人员使用UITableView
或UICollectionView
以水平或垂直方式列出某些内容。
在测试一些标准应用程序(尤其是电子商务)时,使用 UIScrollView
和 UIView
作为子视图并在其上添加手势。我想了解的是,为什么这些应用程序不使用 tableview 或 collection 来列出一些东西?这背后的原因是什么?
【问题讨论】:
【参考方案1】:这是我一直比较喜欢 UITableView 和 UICollectionView 的一些东西。
-
UITableView 和 UICollectionView 的最大优势之一是可重用性。
说到 autolayout,它很容易通过 UIScrollView 处理 UITableView 和 UICollectionView
索引视图
委托方法支持
重新加载(更新)视图与 UIScrollView 相比很容易
我想念的一件事是 UITableView 和 UICollectionView 中的 分页,因为它在 UIScrollView 中非常流畅
【讨论】:
【参考方案2】:(1) 对 UIScrollView 使用 UITableView 或 UICollectionView 的好处是内存。
例如,如果您有 100 个项目,那么您必须在 UIScrollView 的下方继续添加,因此 100 个项目数据将在内存中。
在 UITableView 或 UIcollectionView 中,有 dequeueReusableCellWithIdentifier 仅保留内存中可见的那些项目。当您向上/向下滚动时,虽然项目不可见,但将在内存中。
(2) 委托方法 - NoOfSections、NoOfRows、DidSelectedRow 等 - 虽然 UIScrollView 中没有这些东西。所以你必须通过编码来管理。
【讨论】:
所以您的意思是,开发人员将获得管理内存的完全控制权?如果他使用滚动视图 在内存使用方面,UITableView 或 UICollectionView 会比 UIScrollView 更好。 那为什么有些开发者使用 uiscrollview 而不是 tableivew/collection?自己控制视图管理是否可行? scrollView 和 tableView 有不同的用法。列出 tableView 更好的东西。当有一个表单(比如注册新用户)有太多标签和文本字段超出 View 的高度时,这个时候 scollView 更好。理想情况下,使用 scrollView 列出事物并不是更好的方法。【参考方案3】:UIScrollView 相对于 UITableView/UICollectionView/AutoLayout 的一个优势是平滑的滚动性能。
最近,我需要重新实现一些旧的新闻应用程序,它使用 UIScrollView 来显示新闻内容。 App 将创建所有视图并将它们添加到 UIScrollView。这将消耗大约 15-20 MB 的 RAM 内存。
我必须实现的新设计更复杂,但可以通过 UIScrollView 或 UITableView 和 UICollectionView 组合来实现。 我选择了 UITableView & UICollectionView 和 Auto Layout。完成实施后,性能非常糟糕。以前的 UIScrollView 实现在 iPhone 4S 上是完美的 60fps。有了新的实现,即使在 iPhone 6S 上我也会丢帧。我优化了图像,以便它们在背景上调整大小,这样就没有未对齐的图像,并且我还最小化了混合图层通道。这有点帮助,但仍远非完美。
我最终在许多地方放弃了 AutoLayout,并预加载了所有 UITableView 单元格并将它们保存在 NSArray 中,以便可以立即返回单元格而无需配置(因为这需要时间)。当然,这样一来,表格视图单元格的可重用性就大打折扣了,但即使在 iPhone 4S 上,滚动性能也有了很大提高。
结论:有时,UIScrollView 和手动框架计算是值得的,如果你的整个视图不是太大,那么它可以很容易地适应内存。 通常,UITableView 和 UICollectionView 和自动布局在滚动时丢帧方面可能会很昂贵。最终用户不会关心你是如何实现的,但他们会抱怨应用程序不流畅。
当然,你很少需要这个。始终坚持首先使用 UITableView 和 AutoLayout(或 UICollectionView 和 AutoLayout,如果需要),因为它们使生活更轻松,原因有很多(支持各种屏幕尺寸,包括旋转),但请记住,如果黑天来临时,会有 UIScrollView需要出现。
【讨论】:
【参考方案4】:UICollectionView 类:-
UICollectionView 类管理有序的数据项集合,并使用可自定义的布局呈现它们。集合视图提供与表视图相同的通用功能,只是集合视图能够支持的不仅仅是单列布局。集合视图支持可用于实现多列网格、平铺布局、圆形布局等的可定制布局。如果需要,您甚至可以动态更改集合视图的布局。
UITableView 类:-
表格视图在单个列中显示项目列表。 UITableView 是 UIScrollView 的子类,它允许用户滚动表格,虽然 UITableView 只允许垂直滚动。包含表格各个项目的单元格是 UITableViewCell 对象; UITableView 使用这些对象来绘制表格的可见行。单元格有内容——标题和图像——并且可以在靠近右边缘的地方有辅助视图。标准附件视图是披露指示器或细节披露按钮;前者通向数据层次结构的下一级,后者通向所选项目的详细视图。辅助视图也可以是框架控件,例如开关和滑块,也可以是自定义视图。表格视图可以进入编辑模式,用户可以在其中插入、删除和重新排序表格的行。
人们主要使用UICollectionview
来创建在网格中显示多个图像的UI 类型。使用 UITableView 会有复杂的逻辑,但使用 UICollectionview
会很容易。
【讨论】:
【参考方案5】:UITableView 比 UIScrollView 有很多优势,比如:
使用自动布局时,UITableView 的可重用性更高。 列表项在 UITableView 的情况下内存管理更好。
【讨论】:
以上是关于UIScrollView 相对于 UITableView 和 UICollectionView 的优势的主要内容,如果未能解决你的问题,请参考以下文章
UIScrollView 嵌入其他 UIScrollView