将子视图添加到 UICollectionView - 禁用滚动

Posted

技术标签:

【中文标题】将子视图添加到 UICollectionView - 禁用滚动【英文标题】:Adding subview to UICollectionView - disables scrolling 【发布时间】:2015-07-20 03:27:01 【问题描述】:

我想向 UICollectionView 添加一个子视图,以便制作一个随 collectionview 滚动的左侧面板。

使用

[self.collectionView addSubview:myView]

所有触摸都被禁用,我无法再滚动视图。我读过像这样向 collectionView 添加子视图是不好的做法。这是真的吗?为什么在

时它会禁止触摸到达collectionView事件
userInteractionEnabled = NO

我正在尝试这样做:imgur link 通过抓取每个部分中第一个单元格的框架位置,并向 myView 添加一个具有相同 y 值的点。

感谢您的帮助!

【问题讨论】:

你在使用 UICollectionViewController 吗? @muku no,自定义视图控制器。 [self.view insertSubview:myView aboveSubview:self.collectionView ],你试过了吗 虽然这确实恢复了滚动能力,但视图不会随着 collectionview 滚动 【参考方案1】:

使用addSubview: 方法将子视图添加到UICollectionView 是非常糟糕的做法。它会在 CollectionView 的正常行为中导致许多不同的问题。它可以遮挡其下方的视图,捕获触摸事件,阻止它们到达 CollectionView 中的实际滚动视图等。使用此方法添加的子视图也不会像 CollectionView 中的其他元素那样滚动。

正确的做法是为点实现一种新类型的UICollectionViewCell,并在prepareForLayoutlayoutAttributesForElementsInRect: 方法中计算它们的位置。基本上,每一行都会有一个或两个单元格。哪些会有两行,由你在我提到的方法中确定。

事实上,Apple 的文档有一个完美的示例,它比您尝试实现的目标还要复杂。你应该从this link查看它。

【讨论】:

【参考方案2】:

我可以知道滚动视图的用途吗?因为,如果您正在寻找仅显示标签或图像等的子视图,如果我没记错的话,您可以使用自定义 collectionview 单元格...希望它有所帮助:) :)

【讨论】:

以上是关于将子视图添加到 UICollectionView - 禁用滚动的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式使用自动布局将子视图添加到 UICollectionView 不起作用

UICollectionView 固定背景视图

iOS - 将子视图添加到子视图控制器视图

将子视图添加到 UICollectionViewCell 子类?

仅将子视图添加到当前视图的 UINavigationBar

将子视图添加到视图控制器