setContentOffset第一次不适用于UITableViewCell中的UIScrollView

时间:2018-06-26 05:03:44

标签: ios swift uitableview uiscrollview

我有一个水平的 UIScrollView ,它已添加为自定义 UITableViewCell 中的子视图。在某些情况下,我想更改通过执行此代码获得的scrollview内容偏移量

cell.horizontalScrollView.setContentOffset(CGPoint(x: 300, y: cell.horizontalScrollView.contentOffset.y), animated: true)
UITableView的{​​{1}}函数中的

cellForRowAtIndexPath都在需要编程时被调用。

问题是,这第一次不起作用。即

首次加载表格视图时,根据代码,可见单元格内的滚动视图不会滚动。其偏移量仅为(0,0)。 ---- 这是问题!

但是在那之后,当我滚动tableview.reloadData()时,新单元格(重用的单元格)就会更新,滚动视图的位置也会更改。 (我从一开始就需要!)

因此,我想以编程方式更改tableView初始偏移量(位置)。我该如何实现?

2 个答案:

答案 0 :(得分:1)

最后,我坐了几天后找到了解决方案!

在为layoutIfNeeded设置UITableViewCell之前,必须在cellForRowAtIndexPath方法内为contentOffset实现UIScrollView

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath) as! CustomCell
    cell.layoutIfNeeded()
    cell.horizontalScrollView.setContentOffset(CGPoint(x: 300, y: cell.horizontalScrollView.contentOffset.y), animated: false)
    return cell
}

答案 1 :(得分:0)

实现此目的的最佳方法是对单元格进行子类化,然后在layoutSubviews方法中设置内容偏移量。