首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIScrollView contentOffset的bug?

UIScrollView contentOffset的bug?
EN

Stack Overflow用户
提问于 2017-04-10 14:21:24
回答 4查看 2.8K关注 0票数 3

我将scrollView的属性isPagingEnabled设置为true,如下所示:

代码语言:javascript
复制
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)

和委托方法:

代码语言:javascript
复制
func scrollViewDidScroll(_ scrollView: UIScrollView) {
    print(scrollView.contentOffset.x)
}

将视图滚动到边界时,控制台将打印,如中所示:

红色框中的值不应该打印出来,对吗?

但是,如果将isPagingEnabled设置为false,则控制台打印是正常的。这是UIScrollView的错误吗?

EN

回答 4

Stack Overflow用户

发布于 2017-04-10 15:09:09

您的内容偏移显示错误,因为您在视图中使用内容大小加载在此方法中使用内容大小而不是在设置外打印您的内容

代码语言:javascript
复制
 override func viewDidLayoutSubviews()
 {
  scrollView.contentSize = CGSize(width: view.bounds.width * 2, height: 0)
 }
票数 1
EN

Stack Overflow用户

发布于 2017-04-10 15:12:00

据我所知,它工作正常,当你将contentSize设置为你的scrollview时,它会在第一时间响应他们的委托

函数scrollViewDidScroll(_ scrollView: UIScrollView)

每当用户试图滚动或拖动时,上面的委托将递归调用,这里你的宽度宽度是你的视图边界宽度的两倍(所以有两个页面,contentOffset.x将从0开始,滚动的当前位置,如果它在第二个页面,这将给你的视图宽度* n ),你设置为真的。

检查此https://developer.apple.com/reference/uikit/uiscrollview/1619404-contentoffset

缺省值为CGPoint​Zero.

实际上,contentOffset会告诉你当前滚动位置。

票数 1
EN

Stack Overflow用户

发布于 2017-04-10 14:32:41

每当UIScrollView进行滚动时,此方法scrollViewDidScroll(_ scrollView: UIScrollView)都会被调用。任何方向,如果您滚动,您将获得这些类型的输出。

但是,如果您想要一种分页方法,那么您可以使用以下方法来代替此方法:

代码语言:javascript
复制
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {

        let pageNumber = round(scrollView.contentOffset.x / scrollView.frame.size.width)
        print("pageNumber = \(pageNumber)")

    }

通过这种方法,您将获得UIScrollView的确切页码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43316178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档