将 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 一起使用