将 UICollectionView 和 UITableView 放在 iOS 的 UIScrollView 中是一种好习惯吗?

Posted

技术标签:

【中文标题】将 UICollectionView 和 UITableView 放在 iOS 的 UIScrollView 中是一种好习惯吗?【英文标题】:Is it a good practice to put UICollectionView and UITableView inside a UIScrollView in iOS? 【发布时间】:2018-04-28 20:14:03 【问题描述】:

我在谷歌上搜索过诸如“将表格视图/集合视图放入滚动视图”之类的问题,但所有这些问题都是关于如何解决这样做时的一些意外行为,没有多少人会问这是否是很好的做法。

我曾经使用react-native 来开发移动应用程序。他们有一个名为FlatList 的组件,有点像Swift 中的UITableView。我曾经在ScrollView里面放了一个FlatList并实现了无限滚动,但是发生了很多奇怪的事情:

    我还没有滚动到底部,但是FlatList一直在渲染更多的数据,好像已经到了尽头,导致一段时间后内存泄漏

    当我试图获取当前滚动位置并基于它做一些动画时,它总是给我错误的滚动位置

    等等……

我用 Swift 写了同样的东西,上面列出的问题都没有出现。但是,我想问一下,这样做会不会有任何潜在的问题?

为了帮助您理解我为什么要将表格视图和集合视图放在滚动视图中,请查看这张图片(如果您可以建议其他方法来做同样的事情,而无需在滚动视图,那太好了!)

更新

我将所有内容都放在滚动视图中,因为我想在用户在文本视图中输入时禁用拖动键盘

【问题讨论】:

【参考方案1】:

TableView 和 CollectionView 继承自 ScrollView。所以你提到的行为已经在那些组件上。

“最佳”做法是只有 1 个 CollectionView(没有 ScrollView 或 TableView)并创建自己的 CollectionViewLayout,这样您就可以为每个部分定义不同的布局和滚动,但这可能会变得有点过于复杂必须自己实现这些行为。

另一种方法是拥有一个主 CollectionView,其中每个部分都有另一个 CollectionView(1 个用于照片,1 个用于“添加位置”、“标记人员”等)。

【讨论】:

以上是关于将 UICollectionView 和 UITableView 放在 iOS 的 UIScrollView 中是一种好习惯吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何将背景图像添加到 UICollectionView 将滚动和缩放单元格

将水平和垂直 CAGradientLayer 蒙版应用到 UIScrollView/UICollectionView

将 UICollectionView 与 CoreData 和 NSFetchedResultsController 一起使用

UITableView 和 UICollectionView ?需要帮助

检测用户将项目拖出 UICollectionView?

ALAsset 指针在访问时抛出 EXC_BAD_ACCESS