2016-01-20 71 views
0

我有这个表格视图的表格视图单元格具有宽度和屏幕高度。每个都显示一个图像。 在您浏览表格视图时,您可以让一个表格视图单元格占据整个屏幕。或者最多可以同时在应用程序的屏幕上看到两个表视图单元格。 我的问题是:有什么方法可以找出哪两个表格视图单元比另一个占据更多的屏幕高度?Swift - 找出哪个表格视图单元格占据大部分屏幕

回答

2

看看第二个可见细胞(tableView.visibleCells[1])并检查其位置y。如果它小于tableView的一半高度,它会占用更多的屏幕,否则会占用更少的屏幕。打破任何你想要的方式。

编辑

对于一个给定的indexPath位置y是固定的,所以你需要考虑的tableView的contentOffset

CGFloat yOrigin = [tableView.visibleCells[1] frame].origin.y - tableView.contentOffset.y; 
+0

我试过像这样: print(tableView.visibleCells [0] .frame.origin.y) print(tableView.visibleCells [1] .frame.origin.y) 不管我如何移动2个单元格屏幕(更高或更低),第2我得到:568和1136,而第二和第三我得到1136和1704. 这似乎并不重要,哪个需要更多的屏幕或更少的frame.origin。 y不会改变。 – asheyla

+0

对。你必须考虑到tableView的contentOffset。我会更新我的答案。 – Avi

+0

这是因为view.fram总是指向超级视图的内部坐标系。 您可以将坐标转换为self.view的坐标。 UIView有点转换的内置方法。您也可以将它转换为主窗口或设备坐标,但旋转适用时加上设备的原点(0.0)与UIKit coodrinate系统不同,可能会造成混淆。 –

0

你可能会尝试获取tableView的visibleCells并检查这些单元格的原点。由于您在任何时候都会有2个可见细胞,因此比较它们各自的帧的y值可能会告诉您哪个占据了更高的高度。

+0

我试图像这样: 打印(tableView.visibleCells [0] .frame.origin.y) 打印(tableView.visibleCells [1] .frame.origin.y) 而且不管如何移动2个细胞在屏幕上(更高或更低),对于前2我得到:568和1136,而第二和第三我得到1136和1704. 这似乎并不重要,哪个需要更多的屏幕或更少的帧。 origin.y不会改变。 – asheyla

0

以下是找出哪些细胞可见超过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引用。

相关问题