嵌入在 UITableViewCell 中的动态、自定义布局 UICollectionView

Posted

技术标签:

【中文标题】嵌入在 UITableViewCell 中的动态、自定义布局 UICollectionView【英文标题】:dynamic, custom layout UICollectionView embedded in UITableViewCell 【发布时间】:2018-09-30 05:30:32 【问题描述】:

我的 UITableViewController 有 1 个部分和标题,里面有 UISegmentedControl。

If user presses first segment we should display UITableView cells

If user presses second segment we should display custom vertical scrolling collection grid with collection items below that header

可能的解决方案

    将 UITableViewController 更改为 UICollectionViewController,将 UITableViewCells 更改为 UICollectionViewCells。这应该可行,但我试图避免这种解决方案

    UICollectionView 嵌入在 UITableViewCell 中。将 UICollectionView 滚动启用设置为 false,调整 UITableViewCell 的高度以适应整个 UICollectionView 的 contentSize.height。在容器 (UITableViewCell) 的 systemLayoutSizeFitting(...) 方法中,我们在容器和包含的 UICollectionView 上调用 layoutIfNeeded 并返回 UICollectionView 的 contentSize。

    问题:

    如果我们有数百个项目(每个项目的 cellForItemAtIndexPath),则(重新)计算整个 UICollectionView contentSize 需要大量工作。想以某种方式避免这种情况。也许我们可以在滚动嵌入其中的 UICollectionView 时增加容器(UITableViewCell)的高度。

    与 2 相同,但我们有固定大小的容器 UITableViewCell(与没有标题的视图相同的高度),里面有 UICollectionView。当我们将 UITableView 滚动到最底部时,UICollectionView 滚动应该会继续滚动。

    问题:

    我不明白如何处理两个 UIScrollView 的 scrollingEnabled = true 实例。我认为这可以通过平移手势识别器代表来解决。如果是这样,我需要帮助。

【问题讨论】:

【参考方案1】:

我个人会选择 1 号并完全避免 2 号。对于 3 号,您可以在点击第二段时设置tableView.scrollingEnabled = false。点击第一段时将其设置为true。这样,当它是false 时,您的UITableViewCell 中的UICollectionView 仍然可以滚动。

This tutorial 可能有助于将UICollectionView 放入UITableViewCell

【讨论】:

我正在寻找通用解决方案。 1 并不是真正的通用。想象一下,UITableViewController 正在管理其子视图控制器,这些子视图控制器动态嵌入到容器 UITableViewCell 中。它们可以是 UITableViewController、UICollectionViewControllers 或只是普通的 UIViewControllers。 for 3. 当外部滚动到底部时,滚动手势应该以某种方式从外部滚动视图委托到内部滚动视图。和颠倒的滚动方向相反。 我已经阅读了 Ash 的文章,但它与我的问题无关,因为 UITableViewCell 中嵌入的 UICollectionView 应该具有垂直滚动功能

以上是关于嵌入在 UITableViewCell 中的动态、自定义布局 UICollectionView的主要内容,如果未能解决你的问题,请参考以下文章

当移动到嵌入在 UITableViewCell 中的 UITextView 中的新行时,光标消失

iOS Swift - 嵌入在 UITableViewCell 中的 AVPlayer

在嵌入在 UITableviewCell 中的 UICollectionView 中进行 Segue,Swift

如何为嵌入在 UITableViewCell 中的 UIView 设置动画

如何从嵌入在 UITableViewCell (Swift) 中的 UICollectionView 的单元格中分离出来?

iOS/Swift:UITableViewCell 中的两个嵌入式视图在运行时未出现