检查 collectionViewCell 是不是在 collectionView 上显示超过 50%

Posted

技术标签:

【中文标题】检查 collectionViewCell 是不是在 collectionView 上显示超过 50%【英文标题】:Check if a collectionViewCell is showing more than 50% on collectionView检查 collectionViewCell 是否在 collectionView 上显示超过 50% 【发布时间】:2020-07-26 04:50:37 【问题描述】:

我有一个带有 (3*3 Grid) 的 UICollectionView,所以当我上下滚动时,有没有办法可以检测到集合视图单元格是否在屏幕上显示超过其高度的 50%?

let visibleRect = CGRect(origin: collectionView.contentOffset, size: collectionView.bounds.size)
let visiblePoint = CGPoint(x: visibleRect.minX, y: visibleRect.midY)
let visibleIndexPath = collectionView.indexPathForItem(at: visiblePoint)

我已经尝试过了,但它似乎不起作用。有人对此有解决方案吗?

【问题讨论】:

【参考方案1】:

你可以要求

@property(nonatomic) CGPoint contentOffset; 

UIScrollView,因为 UICollectionView 继承自它们。

别忘了你的 Cell 有一个 CALayer,它也知道可见的 Rectangle。

CGRect visiblerect = cell.layer.visibleRect;
if (visiblerect.size.height > (cell.frame.size.height * 0.5)) 
    // do stuff when cell is more visible then half its size

【讨论】:

谢谢伙计,是的,我知道 contentOffset,但是我如何检查单元格在屏幕上的显示率是否超过 50%? 当您知道单元格的 frame.size.height 和单元格周围的边距时,collectionView.contentSize;你甚至可以询问 UICollectionView-visibleCells 并做简单的数学运算。 哈哈。抱歉编辑了我的答案。它是一个 objC .. 很容易翻译成 swift。我认为 啊,太好了,我知道它现在是如何工作的了,谢谢!还有一件事,我尝试使用 cell.layer.visibleRect,但是对于显示小于 50% 的单元格,它总是返回单元格的实际高度?

以上是关于检查 collectionViewCell 是不是在 collectionView 上显示超过 50%的主要内容,如果未能解决你的问题,请参考以下文章

Swift - 从 CollectionViewCell 中的 UIButton 推送到 ViewController

如何在collectionViewCell中使用动态大小的scrollView

CollectionViewCell 问题。从 .xib 到自定义 collectionviewcell 的故事板转换

通过 UIButton 选择一个单元格 - CollectionViewCell - Swift

UITextView 避免 collectionViewCell 被点击

访问 CollectionViewCell