我有一个包含collectionView
和scrollView
的VC。我把这段代码放在滚动视图中来更改pageController
的当前页面:
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
let pageNumber = round(scrollView.contentOffset.x / scrollView.frame.size.width)
self.pageController.currentPage = Int(pageNumber)
}
它对scrollView
很好用,但问题是当我甚至滚动collectionView
它声明并导致pageController
中不必要的更改时!
我该怎么办?
除了上面发布的答案之外,您还可以使用视图的 tag 属性。
只需在 xib 中或通过代码为您的滚动视图分配一个标签 (Int(。
yourScrollView.tag = 10
在滚动视图委托方法中检查此标记:
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
if scrollView.tag == 10 {
///Your scrollview was scrolled
} else {
// Collection view was scrolled
}
}
if scrollView == yourScrollView{
let pageNumber = round(scrollView.contentOffset.x / scrollView.frame.size.width)
self.pageController.currentPage = Int(pageNumber)
}
检查运行该方法的实例是否实际上是您的 scrollView
首先,您必须了解有关UICollectionView
的细节。该UICollectionView
是从 UIScrollView
的子类。这就是为什么它同时被调用滚动(滚动集合视图和滚动滚动视图(的原因。您可以这样做来区分它是什么类型的滚动,
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
if scrollView == "Your scrollView outlet name" { // Scroll view
let pageNumber = round(scrollView.contentOffset.x / scrollView.frame.size.width)
self.pageController.currentPage = Int(pageNumber)
} else {
// Collection view
}
}
谢谢。
检查scrollViewDidEndDecelerating
内的scrollView
是滚动视图还是集合视图。只需在执行您拥有的 2 行代码之前添加一个if scrollView == myScrollView
。
您的代码应如下所示
函数
scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
if scrollView == myScrollView {
let pageNumber = round(scrollView.contentOffset.x / scrollView.frame.size.width)
self.pageController.currentPage = Int(pageNumber)
}
}