防止 UICollectionView 在 contentOffset 之外滚动
Preventing UICollectionView from scrolling outside of contentOffset
我创建了一个包含 4 个单元格的 collectionView,单元格框架等于整个 window 框架,这样我就可以滚动浏览它们,就像它们是 PageViewController 一样。
lazy var collectionView : PagesCollectionView = {
let layout = UICollectionViewFlowLayout()
layout.scrollDirection = .horizontal
layout.minimumLineSpacing = 0
let collectionView = PagesCollectionView(frame: .zero, collectionViewLayout: layout)
collectionView.delegate = self
collectionView.dataSource = self
collectionView.isPagingEnabled = true
collectionView.alwaysBounceHorizontal = false
return collectionView
}()
我想要实现的目标是,当我在第一个单元格中并向左滚动时(contentOffset 为负),collectionView 停止滚动,而当我在最后一个单元格中时,collectionView 停止向右滚动, 我还想看手机
我尝试了不同的程序:
这个只有在首先滚动它之后才阻止 scrollView,从不重新启用另一个方向的滚动:
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if(scrollView.contentOffset.x == 0){
scrollView.isScrollEnabled = false
}
}
根据其他 Whosebug 主题的建议:
func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
if(scrollView.contentOffset.x == 0){
collectionView.isScrollEnabled = false
}
collectionView.isScrollEnabled = true
}
但这只会阻止双向滚动。
我其实不知道怎么解决。
我居然想出了解决这个问题的方法,真的很简单。
在我设置 collectionView 的 viewDidLoad 方法中,我将 bounces 设置为 false:
collectionView.bounces = false
我创建了一个包含 4 个单元格的 collectionView,单元格框架等于整个 window 框架,这样我就可以滚动浏览它们,就像它们是 PageViewController 一样。
lazy var collectionView : PagesCollectionView = {
let layout = UICollectionViewFlowLayout()
layout.scrollDirection = .horizontal
layout.minimumLineSpacing = 0
let collectionView = PagesCollectionView(frame: .zero, collectionViewLayout: layout)
collectionView.delegate = self
collectionView.dataSource = self
collectionView.isPagingEnabled = true
collectionView.alwaysBounceHorizontal = false
return collectionView
}()
我想要实现的目标是,当我在第一个单元格中并向左滚动时(contentOffset 为负),collectionView 停止滚动,而当我在最后一个单元格中时,collectionView 停止向右滚动, 我还想看手机
我尝试了不同的程序: 这个只有在首先滚动它之后才阻止 scrollView,从不重新启用另一个方向的滚动:
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if(scrollView.contentOffset.x == 0){
scrollView.isScrollEnabled = false
}
}
根据其他 Whosebug 主题的建议:
func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
if(scrollView.contentOffset.x == 0){
collectionView.isScrollEnabled = false
}
collectionView.isScrollEnabled = true
}
但这只会阻止双向滚动。 我其实不知道怎么解决。
我居然想出了解决这个问题的方法,真的很简单。
在我设置 collectionView 的 viewDidLoad 方法中,我将 bounces 设置为 false:
collectionView.bounces = false