我在UICollectionView中做分页效果。我的解决方案如下所示。

setContentOffset方法将在scrollViewWillEndDragging中调用,并计算下一页或上一页的contentOffset x值,并使用动画对其进行设置。

但是,有一个问题是,一旦调用setContentOffset函数,如果我触摸屏幕,则scrollView将停止。即使松开手指,手指也不会继续,这意味着它会停在错误的位置。

实际上,我尝试覆盖targetOffset中的UICollectionViewFlowLayout,但是此问题仍然存在。另外,我尝试调用touchesEnded,但这根本没有触发。此外,我尝试了isPagingEnabled,它不会导致此问题,但是我的collectionView项更加复杂,这导致了错误的targetContentOffset

我当前的解决方案是在setContentOffset之后设置为scrollView.isUserInteractionEnabled = false,并在调用scrollViewDidEndScrollingAnimation时将其设置回true。可以,但是我仍然想知道是否有什么好方法吗?

我同时尝试了Google日历和Outlook,它们会将您重置为应有的位置。

我在线搜索,找不到关于此问题的任何问题。

你可以帮帮我吗?谢谢!

最佳答案

我做了很多努力,终于找到了与大家分享的正确内容。

解决方案是在targetContentOffset中设置scrollviewWillEndDragging,然后我可以得到想要的东西。

这背后的真相是,如果您调用setContentOffset,则在第二次endDragging(当您在第一次endDragging之后触摸屏幕时)将不会调用scrollviewWillEndDragging。但是,如果仅设置targetContentOffset = requiredContentOffset,则将第二次调用endDragging,这时将再次调用分页方法以将UIScrollView导航到正确的位置。

从中我学到的是,在进行分页效果时永远不要调用setContentOffset。有关分页的一些在线教程是完全错误的。

关于ios - UIScrollView setContentOffset(分页)由触摸屏停止,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56099614/

10-09 09:15