UIScrollView contentOffset的错误?

时间:2017-04-10 06:21:24

标签: ios swift uiscrollview

我将scrollView的属性pip install python3-tk sudo apt-get install python3-tk 设置为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)

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

enter image description here

enter image description here

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

但是,如果将func scrollViewDidScroll(_ scrollView: UIScrollView) { print(scrollView.contentOffset.x) } 设置为isPagingEnabled,则控制台打印正常。这是false的错误吗?

4 个答案:

答案 0 :(得分:1)

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

 override func viewDidLayoutSubviews()
 {
  scrollView.contentSize = CGSize(width: view.bounds.width * 2, height: 0)
 }

答案 1 :(得分:1)

据我所知,当您将 contentSize 设置为 scrollview 时,它会正常工作,这将响应他们的委托第一次本身。

func scrollViewDidScroll(_ scrollView:UIScrollView)

每当用户尝试滚动或拖动时,上面的委托将递归调用,这里你的contentSize的宽度是你的视图边界宽度的两倍(所以有两个页面, contentOffset.x 将启动0和滚动的当前位置,如果它在第二页,将为您的视图提供 width * n ),并将 isPagingEnabled 设置为 true

选中此https://developer.apple.com/reference/uikit/uiscrollview/1619404-contentoffset

默认值为 CGPoint Zero

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

答案 2 :(得分:0)

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

但是,如果你想要一个分页方法,那么你可以使用:

代替这种方法
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {

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

    }

通过此方法,您将获得UIScrollView的确切页面编号。

答案 3 :(得分:0)

请使用框架而不是边界。

UIView的边界是矩形,表示为相对于其自身坐标系(0,0)的位置(x,y)和大小(宽度,高度).UIView的框架是矩形,表示作为相对于超视图的位置(x,y)和大小(宽度,高度),它包含在其中。

 let scrollView = UIScrollView(frame: view.frame.size)
 scrollView.contentSize = CGSize(width: view.frame.size.width * 2, 
 height: 0)
 scrollView.delegate = self
 scrollView.isPagingEnabled = true
 view.addSubview(scrollView)