我将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)
将视图滚动到边界时,控制台打印,如下所示:
和
红色框中的值不应打印出来,对吗?
但是,如果将func scrollViewDidScroll(_ scrollView: UIScrollView) {
print(scrollView.contentOffset.x)
}
设置为isPagingEnabled
,则控制台打印正常。这是false
的错误吗?
答案 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)