2016-09-22 117 views
5

我有一個帶有水平集合視圖的單元格的tableview。我有多個具有相同樣式的單元格。假設索引0 & 5的tableView單元格具有相同的樣式(我在dequeueReusableCellWithIdentifier中使用了相同的UITableViewCell子類)。嵌入在UITableViewCell中的UICollectionViewCell在重新出現時更改滾動位置

  1. 用戶滾動到tableViewCell索引5.他向左滾動水平收集視圖(比方說,紅1黃-2細胞現在隱藏,青色-3是最左邊)。
  2. 用戶滾動回tableViewCell索引爲0雖然這是一個不同的UITableViewCell實例中,收集在視圖索引5

enter image description here

簡言之,當被設置爲一樣的單元偏移我重新使用tableview單元格,UITableViewCell中的滾動視圖的內容偏移量將被設置爲之前的重用單元格。

是否有某種方式可以禁用此行爲,以便每個單元格保持其自己的偏移量,而不管其他單元格上的任何滾動活動。

+0

你找到一個解決的辦法?我面臨同樣的問題。 – Rishab

回答

0

您可以設置您的單元格以確認UIScrollViewDelegate並實現scrollViewDidEndDecelerating方法來保存滾動偏移量,然後使用該偏移量恢復您在UITableView的cellForRowAtIndexPath中取消出現單元格時的原始偏移量。

1

您可以通過添加以下方法您的自定義單元格類實現這一點:

public func setScrollPosition(x: CGFloat) { 
    collection.setContentOffset(CGPoint(x: x >= 0 ? x : 0, y: 0), animated: false) 
} 

public func getScrollPosition() -> CGFloat { 
    return collection.contentOffset.x 
} 

而在你的表視圖的數據源類以下內容:

var offsets = [IndexPath:CGFloat]() 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) 
    cell.setScrollPosition(x: offsets[indexPath] ?? 0) 
    return cell 
} 

func tableView(_ tableView: UITableView, didEndDisplaying cell: UITableViewCell, forRowAt indexPath: IndexPath) { 
    offsets[indexPath] = collectionCell.getScrollPosition() 
} 
相關問題