自定义 UICollectionViewCell 中的 UIScrollview 不起作用
Posted
技术标签:
【中文标题】自定义 UICollectionViewCell 中的 UIScrollview 不起作用【英文标题】:UIScrollview in a Custom UICollectionViewCell Not Working 【发布时间】:2013-03-13 20:25:34 【问题描述】:我正在尝试让UIScrollView
在UICollectionViewCell
内正常工作。
自定义单元格正在通过 xib 文件加载,它是 UICollectionViewCell
的子类。我在其他控件工作时遇到了问题,例如按钮和手势识别器,因为UICollecitonView
似乎没有向单元格传递任何触摸,但我在UICollectionView
本身上解决了那些带有手势识别器的问题。我剩下的一个问题是 UIScrollViews...
UICollectionView
水平滚动,单元格中的UIScrollView
垂直滚动。我尝试使用 UIPanGestureRecognizer
滚动它们,但这似乎禁用了 UICollectionView's
滚动功能。
有人有什么想法吗?
编辑:知道了!
所以我已经从我们在 ios6 之前使用的以前的第三方库转换为集合视图。原来问题出在我们用于单元格的 xib 文件上。在之前的库中,单元格只是 UIView 的子类。我将类更改为子类UICollectionViewCell
,并更新了自定义类。事实证明这还不够。为了让触摸传递到单元格,我实际上必须从对象库中拖入一个新的UICollectionViewCell
,复制所有子视图并重新连接IBOutlets
。在这之后,它起作用了!
【问题讨论】:
你看过 UIGestureRecognizerDelegate 吗? 我有,而且我已经尝试过使用 gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer: 并且额外的平移识别器仍然会覆盖默认的滚动行为......还有什么我应该使用的吗? 【参考方案1】:我通过确保在主线程上调整滚动视图的大小,在我的代码中解决了这个问题。
我的集合视图正在使用 nsfetchedresultscontroller,它使用块调用来刷新选定的单元格。第一次选择单元格时,滚动视图不会滚动。但是,如果您单击另一个单元格并单击返回,它将正常工作。单元格的初始负载似乎大小计算可能不是它需要在主线程上影响行为的地方。
-(UICollectionViewCell *) collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"CustomCell" forIndexPath:indexPath];
dispatch_async(dispatch_get_main_queue(), ^
// resizeScrollViewMethod should be where scrollview content size > scroll view frame.
[cell resizeScrollViewMethod];
);
return cell;
- (void) resizeScrollViewMethod
//Do your scrollview size calculation here
【讨论】:
【参考方案2】:UICollectionViewCell 中的 UISCrollView 没有问题。使用 StoryBoard,您将滚动确定。 UIScrollView 覆盖 UICollectionViewCell,因此 didSelect 仅在 ScrollView 外部和 Cell 内部(scrollView.frame
如果你想实现点击或其他手势,只需将其添加到 awakeFromNib 中的 UIScrollView 中
参考代码:
https://github.com/lequysang/github_zip/blob/master/CollectionViewWithCellScrollViewStoryBoard.zip
【讨论】:
以上是关于自定义 UICollectionViewCell 中的 UIScrollview 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
XCTest 与自定义 UICollectionViewCell
UICollectionViewCell 内带有 UITableView 的自定义单元格
从自定义 UICollectionViewCell 获取正确的按钮