我有一个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)
}

我推得太快,偏移量不对。看起来当前动画停止,并将从当前(未完成)位置执行下一个动画。
有人能解决这个问题吗?

最佳答案

我没有时间测试,但我认为你对问题的主要原因是正确的。由于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)
  }
}

关于swift - UIScrollView setContentOffset不对,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40818835/

10-09 02:17