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



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

cell.horizontalScrollView.setContentOffset(CGPoint(x: 300, y: cell.horizontalScrollView.contentOffset.y), animated: true)

UITableViewcellForRowAtIndexPath函数中,每当我需要以编程方式滚动它时都会调用tableview.reloadData()

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

首次加载表视图时,可见单元格内的滚动视图不会根据代码滚动。它的偏移量刚好在 (0,0( 处。----(这是问题所在!

但是在那之后,当我滚动tableView时,新单元格(重复使用的单元格(会更新并且滚动视图位置会发生变化。(我从一开始就需要!

所以,我想以编程方式更改UIScrollView的初始偏移量(位置(。我怎样才能做到这一点?

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

在为UIScrollView设置contentOffset之前,必须在cellForRowAtIndexPath方法中实现UITableViewCelllayoutIfNeeded

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
}

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

最新更新