【发布时间】:2016-01-20 12:09:03
【问题描述】:
我有这个表格视图,其表格视图单元格具有屏幕的宽度和高度。每个显示一个图像。 当您滚动表格视图时,您可以让一个表格视图单元格占据整个屏幕。或者您最多可以同时在应用程序的屏幕上看到 2 个表格视图单元格。 我的问题是:有什么办法可以找出 2 个表格视图单元格中的哪一个比另一个占据更大的屏幕高度?
【问题讨论】:
标签: swift uitableview
我有这个表格视图,其表格视图单元格具有屏幕的宽度和高度。每个显示一个图像。 当您滚动表格视图时,您可以让一个表格视图单元格占据整个屏幕。或者您最多可以同时在应用程序的屏幕上看到 2 个表格视图单元格。 我的问题是:有什么办法可以找出 2 个表格视图单元格中的哪一个比另一个占据更大的屏幕高度?
【问题讨论】:
标签: swift uitableview
这是找出哪个单元格的可见度超过 60% 的简单方法。
func scrollViewDidScroll(scrollView: UIScrollView) {
checkWhichVideoToEnable()
}
func checkWhichVideoToEnable() {
for cell in tableView.visibleCells as [UITableViewCell] {
if cell.isKindOfClass(UITableViewCell) {
let indexPath = tableView.indexPathForCell(cell)
let cellRect = tableView.rectForRowAtIndexPath(indexPath!)
let superView = tableView.superview
let convertedRect = tableView.convertRect(cellRect, toView: superView)
let intersect = CGRectIntersection(tableView.frame, convertedRect)
let visibleHeight = CGRectGetHeight(intersect)
if visibleHeight > self.view.bounds.size.height * 0.6 { // only if 60% of the cell is visible.
//cell is visible more than 60%
print(indexPath?.row) //your visible cell.
}
}
}
}
来自HERE的参考。
【讨论】:
查看第二个可见单元格 (tableView.visibleCells[1]) 并检查其 y 位置。如果它小于 tableView 高度的一半,它会占用更多的屏幕,否则会更少。随心所欲地打破关系。
编辑
给定 indexPath 的 y 位置是固定的,因此您需要考虑 tableView 的 contentOffset。
CGFloat yOrigin = [tableView.visibleCells[1] frame].origin.y - tableView.contentOffset.y;
【讨论】:
您也许可以尝试获取 tableView 的 visibleCells 并检查这些单元格的来源。由于您随时都会有 2 个可见单元格,因此比较它们各自框架的 y 值可以告诉您哪个占据更多高度
【讨论】: