我在UICollectionView中做分页效果。我的解决方案如下所示。
setContentOffset
方法将在 scrollViewWillEndDragging
中调用并计算下一页或上一页的 contentOffset x 值并设置动画。
但是,有一个问题是,一旦调用了 setContentOffset
函数,如果我触摸屏幕,scrollView 就会停止。即使松开手指,它也不会继续,这意味着它停在了错误的位置。
实际上,我已经尝试覆盖 UICollectionViewFlowLayout
中的 targetOffset
,但这个问题仍然存在。此外,我尝试调用 touchesEnded
但这根本没有触发。此外,我尝试了 isPagingEnabled
,它不会导致这个问题,但我的 collectionView 项目更复杂,这会导致错误的 targetContentOffset
。
我当前的解决方案是在 setContentOffset 之后设置 scrollView.isUserInteractionEnabled = false
并在调用 scrollViewDidEndScrollingAnimation
时将其设置回 true。这没关系,但我仍然想知道是否有任何好的方法可以做到这一点?
我试过谷歌日历和 Outlook,它们会把你重置到它应该在的位置。
我在网上搜索过,找不到关于这个问题的任何问题。
你能帮帮我吗?谢谢!
最佳答案
我尝试了很多来弄明白,最后,我找到了一些正确的东西来与大家分享。
解决方法是在scrollviewWillEndDragging
中设置targetContentOffset
,这样就可以得到我想要的了。
这背后的真相是,如果你调用setContentOffset
,那么scrollviewWillEndDragging
不会在第二次调用endDragging(当你在第一次endDragging之后触摸屏幕时).但是如果简单的设置targetContentOffset = requiredContentOffset
,那么第二次endDragging会被调用,此时会再次调用分页方法将UIScrollView
导航到正确的位置位置。
我从中学到的是,当您执行分页效果时,永远不要调用 setContentOffset
。一些关于分页的在线教程是完全错误的。
关于ios - UIScrollView setContentOffset(Paging)被触摸屏停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56099614/