我有一个水平UIScrollView,它被添加为自定义UITableViewCell中的子视图。在某些情况下,我想更改通过执行此代码实现的滚动视图内容偏移量
cell.horizontalScrollView.setContentOffset(CGPoint(x: 300, y: cell.horizontalScrollView.contentOffset.y), animated: true)
在UITableView
的cellForRowAtIndexPath
函数中,每当我需要以编程方式滚动它时都会调用tableview.reloadData()
。
问题是,这第一次不起作用。
首次加载表视图时,可见单元格内的滚动视图不会根据代码滚动。它的偏移量刚好在 (0,0( 处。----(这是问题所在!
但是在那之后,当我滚动tableView
时,新单元格(重复使用的单元格(会更新并且滚动视图位置会发生变化。(我从一开始就需要!
所以,我想以编程方式更改UIScrollView
的初始偏移量(位置(。我怎样才能做到这一点?
最后,我坐了几天后找到了解决方案!
在为UIScrollView
设置contentOffset
之前,必须在cellForRowAtIndexPath
方法中实现UITableViewCell
的layoutIfNeeded
。
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
方法中设置内容偏移量。