检查表格视图单元格是不是完全可见
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”方法的方法最适合这种情况。以上是关于检查表格视图单元格是不是完全可见的主要内容,如果未能解决你的问题,请参考以下文章