是否可以在第一列不动的情况下使 UICollectionView 视图水平滚动?

Posted

技术标签:

【中文标题】是否可以在第一列不动的情况下使 UICollectionView 视图水平滚动?【英文标题】:Is it possible to make a UICollectionView view horizontal scrolling where first column no moving? 【发布时间】:2017-11-03 14:39:09 【问题描述】:

我需要实现的一个功能是 UICollectionView,它有大量的单元格(产品)并且应该水平和垂直滚动。 唯一的限制是当用户水平滚动时第一列(类别)不应该移动,但当用户与其他单元格(产品)一起上下滚动时应该滚动。是否可以或我需要选择另一个 UI 控件?

【问题讨论】:

UICollectionView 本身不支持此功能。您可能需要覆盖自定义 UICollectionViewFlowLayout,例如 - 'layoutAttributesForElementsInRect'、'layoutAttributesForSupplementaryViewOfKind' 和 UICollectionViewFlowLayout 的其余实用程序。 我现在没有时间给你一个正确的答案,但是是的,这可以通过 UICollectionView 实现。您可以创建UICollectionViewLayout 的子类并将“部分”用作行,将项目用作列。在prepareLayout 中,您基本上必须计算冷冻物品的矩形以将它们固定在适当的位置,并允许其余部分在下方滚动。 这是一个例子:brightec.co.uk/ideas/… 是的,就是这样。唯一的补充是我的视图应该有分隔符(补充视图),所有单元格都带有文本 【参考方案1】:

虽然我不会直截了当地说它是不可撤销的……但我建议你把事情分解一下。听起来您有两个集合、类别和产品,并且这两个 ui 元素具有不同的行为。考虑使用两个单独的 UICollectionView,或者一个 UIStackView 和一个 UICollectionView。

如果您可以分享有关您尝试实现的用户界面的更多详细信息,我可以尝试为您提供更多见解。现在听起来像是一个两视图工作

干杯

【讨论】:

添加截图 我明白了。是的。在这种情况下,您可能希望使用@jlew 的解决方案并创建自己的 UICollectionViewLayout 子类。【参考方案2】:

为什么不把它做成一个单独的视图呢?

class CategoryCollectionView: UIView 
  private let categoryView = UIView()
  private let collectionView = UICollectionView()

那么垂直collectionView将只是ViewController中的一个普通子视图。 因此,按照它,我会制作类似于ViewController -> CollectionView -> Cells -> CategoryCollectionView, CategoryCollectionView, TitleLabel UI 层次结构的“方案”。简单快速

【讨论】:

以及如何使用上面模型中描述的“一些文本一些文本”实现补充视图?如您所见,文本跨越整个控件 @Sergio 您希望从该视图中获得哪种行为?它应该是什么尺寸? 当用户水平滚动时,“类别”列和“某些文本”视图应该是静态的。但是当向上/向下滚动时,所有视图都应该是可滚动的 @Sergio 您可以将主collectionView(包含带有collectionViews 的单元格)的gestureRecogniser-s 发送到其单元格,并要求内部collectionView 手势识别器失败。然后主滚动只有在没有调用内部间隔collectionView的滚动时才会起作用。明白了吗?

以上是关于是否可以在第一列不动的情况下使 UICollectionView 视图水平滚动?的主要内容,如果未能解决你的问题,请参考以下文章

如何用css实现 表格第一列固定 其余内容横向滚动

table拖动滚动条的时候锁定一列或者两列不动

为啥玩到弹丸论破2第一章PTA会卡?就是说画面还是动的但是上面的时间不动,花村的话也不出来。为啥?

如果 pandas 数据框的第一列不匹配,则加入第二列

excel表格中如何让第一列始终显示并打印

你是不是那个带不动的队友