UITableViewCell中的滚动视图不会保存位置

时间:2017-08-01 13:45:31

标签: ios swift uitableview uicollectionviewcell

我的UIScrollView中有一些UITableView

我的问题是,如果我将第一个单元格中的滚动视图滚动到另一个位置,那么第四个单元格也将处于同一位置。

第二个和第五个,第三个和第六个相同......

单元格中的滚动视图是否有办法保持其位置?

1 个答案:

答案 0 :(得分:2)

您应该在数组中保存UIScrollView s的实际内容偏移量,在自定义委托中发生滚动后检索该值,并将偏移量设置为cellForRowAt中保存的值。

<强> CustomCell.swift

weak var delegate: CellScrollViewDelegate?
let scrollView: UIScrollView!
var contentOffset: CGPoint!

func setUpCell() {
    scrollView.delegate = self
    scrollView.contentOffset = savedContentOffset
}


[...]

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    delegate?.horizontalCellDidScroll(indexPath: indexPath, contentOffset: scrollView.contentOffset)
}

<强> TableViewController.swift

var cellScrollContentOffsets = [[CGPoint]]()

func horizontalCellDidScroll(indexPath: IndexPath, contentOffset: CGPoint) {
    cellScrollContentOffsets[indexPath.section][indexPath.row] = contentOffset
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "CellID", for: indexPath)
    cell.delegate = self
    cell.savedContentOffset = cellScrollContentOffsets[indexPath.section][indexPath.row]
    cell.setUpCell()

    return cell
}

<强> Delegate.swift

protocol CellScrollViewDelegate: class {
    func horizontalCellDidScroll(indexPath: IndexPath, contentOffset: CGPoint)
}