检查表格视图单元格是不是完全可见

Posted

技术标签:

【中文标题】检查表格视图单元格是不是完全可见【英文标题】:Check table view cell fully visible检查表格视图单元格是否完全可见 【发布时间】:2021-11-23 17:47:08 【问题描述】:

你好吗

我需要知道如何确定表格视图单元格完全可见,以便在单元格中播放自动播放电影,并检测隐藏表格视图单元格。

我已经在表格视图中应用了下面的代码,但没有给我正确的解决方案。

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt   indexPath: IndexPath) 
   let cellRect = tableView.rectForRow(at: indexPath)
   let isFullyVisible = tableView.bounds.contains(rectInFull)
   if isFullyVisible 
    // Play video
    

那么请你告诉我如何才能看到正确的表格视图单元格

【问题讨论】:

【参考方案1】:

cell.frame.origin.y >= tableview.contentOffset.y && cell.frame.origin.y + cell.frame.size.height

【讨论】:

我在这里找到了解决方案***.com/questions/24825994/… @HamzaAlmass 感谢您的链接。但是我看到关键点,可见性条件的判断,和我指出的一样。 :) 这行不通,您也可以查看 matt ***.com/questions/68108188/… 的最佳答案 @HamzaAlmass 这不起作用,因为您在错误的系统挂钩中检查它。如果在 didScroll 中就可以了。 @HamzaAlmass 当然,您可以转换视图协调,这是您的选择。在表格视图中,单元格不会在水平轴上滚动。所以检查垂直轴就足够了。看里面的东西,而不仅仅是代码。【参考方案2】:

您可能希望实现 UIScrollViewDelegate 方法 scrollViewDidScroll(_:) 并在其中检查表格视图中的可见单元格:

func scrollViewDidScroll(_ scrollView: UIScollView) 
      guard let tv = scrollView as? UITableView else  return 
      
      tv.visibleCells.forEach  $0.playVideo() 

当然,假设单元格上的方法 (playVideo()) 存在,并且它会在视频已经播放时被多次调用(即,如果已经在播放,则必须忽略该调用)。 否则,如果您需要可见单元格的indexPaths 或任何微调,请在表格视图上使用属性indexPathsForVisibleRows 或方法indexPathForRows(in:),那么您可以选择在数组中获取的那些索引路径将指向模型的对象(可能实现 播放视频 逻辑)。

【讨论】:

我在这里找到了解决方案 我在这里找到了解决方案 ***.com/questions/24825994/... – Hamza Almass 刚刚编辑 如果单元格在tableview边界的边缘部分可见,我认为该单元格也将在visibleCells中。 @Neal.Marlin 正如我在回复中提到的,还有可以采用的方法“indexPathsForRows(in:)”,或者最终“visibleCells”也可以被完全拥有框架的人过滤包含在表格视图的“visibleRect”属性中。无论细节粒度如何,我仍然认为实现 UIScrollViewDelegate 的“didScroll”方法的方法最适合这种情况。

以上是关于检查表格视图单元格是不是完全可见的主要内容,如果未能解决你的问题,请参考以下文章

当上边距不完全可见时,UITableView 单元格展开动画会发生变化

仅在表格视图的特定单元格上显示和隐藏视图

使用平移手势选择多个表格视图单元格

除非快速选择所有单元格,否则限制表格视图

自定义表格视图单元格中没有可见视图

表格视图单元格在设备上不可见