UIScrollView setContentOffset 不对

Posted

技术标签:

【中文标题】UIScrollView setContentOffset 不对【英文标题】:UIScrollView setContentOffset not right 【发布时间】:2016-11-26 13:30:46 【问题描述】:

我有一个 UIScrollView,里面有一些标签。我可以使用按钮将滚动视图移动到另一个“页面”。但是当我推得太快时偏移不正确。

我将滚动视图移动到下一页的代码:

@IBAction func moveToRight(_ sender: Any) 
    let size = Int(scrView.contentOffset.x) + Int(scrView.frame.size.width);
    scrView.setContentOffset(CGPoint(x: size, y: 0), animated: true)

当我推得太快时偏移不正确。看起来当前动画停止了,并且将从当前(未完成)位置开始执行下一个动画。

有人对此有解决方案吗?

【问题讨论】:

【参考方案1】:

我没有时间进行测试,但我认为您对问题主要原因的看法是正确的。由于animated 设置为true,我猜contentOffset.x 在动画完成之前还没有设置为最终值。

你为什么不稍微改变你的逻辑并创建一个属性来记住你上次滚动的当前页面:

var currentPage: Int = 0

然后每次向右移动时,尽可能增加当前页码:

@IBAction func moveToRight(_ sender: Any) 
  let maxX = scrollView.contentSize.x - scrollView.frame.width
  let newX = CGFloat(currentPage + 1) * scrollView.frame.width
  if newX <= maxX 
    currentPage = currentPage + 1
    scrollView.setContentOffset(CGPoint(x: newX, y: 0), animated: true)
  

【讨论】:

以上是关于UIScrollView setContentOffset 不对的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView里面的UIScrollView:滚动

问题:UIScrollview 弹跳使父 UIScrollview 弹跳

UIScrollView 嵌入其他 UIScrollView

分页 UIScrollView 内的 UIScrollView

UIScrollView

UIscrollView