2016-01-20 69 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引用。

相關問題