我将scrollView的属性isPagingEnabled设置为true,如下所示:
let scrollView = UIScrollView(frame: view.bounds)
scrollView.contentSize = CGSize(width: view.bounds.width * 2, height: 0)
scrollView.delegate = self
scrollView.isPagingEnabled = true
view.addSubview(scrollView)和委托方法:
func scrollViewDidScroll(_ scrollView: UIScrollView) {
print(scrollView.contentOffset.x)
}将视图滚动到边界时,控制台将打印,如中所示:

和

红色框中的值不应该打印出来,对吗?
但是,如果将isPagingEnabled设置为false,则控制台打印是正常的。这是UIScrollView的错误吗?
发布于 2017-04-10 15:09:09
您的内容偏移显示错误,因为您在视图中使用内容大小加载在此方法中使用内容大小而不是在设置外打印您的内容
override func viewDidLayoutSubviews()
{
scrollView.contentSize = CGSize(width: view.bounds.width * 2, height: 0)
}发布于 2017-04-10 15:12:00
据我所知,它工作正常,当你将contentSize设置为你的scrollview时,它会在第一时间响应他们的委托。
函数scrollViewDidScroll(_ scrollView: UIScrollView)
每当用户试图滚动或拖动时,上面的委托将递归调用,这里你的宽度宽度是你的视图边界宽度的两倍(所以有两个页面,contentOffset.x将从0开始,滚动的当前位置,如果它在第二个页面,这将给你的视图宽度* n ),你设置为真的。
检查此https://developer.apple.com/reference/uikit/uiscrollview/1619404-contentoffset
缺省值为CGPointZero.
实际上,contentOffset会告诉你当前滚动位置。
发布于 2017-04-10 14:32:41
每当UIScrollView进行滚动时,此方法scrollViewDidScroll(_ scrollView: UIScrollView)都会被调用。任何方向,如果您滚动,您将获得这些类型的输出。
但是,如果您想要一种分页方法,那么您可以使用以下方法来代替此方法:
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
let pageNumber = round(scrollView.contentOffset.x / scrollView.frame.size.width)
print("pageNumber = \(pageNumber)")
}通过这种方法,您将获得UIScrollView的确切页码。
https://stackoverflow.com/questions/43316178
复制相似问题