UIScrollView setContentOffset(分页)被触摸屏停止

Posted

技术标签:

【中文标题】UIScrollView setContentOffset(分页)被触摸屏停止【英文标题】:UIScrollView setContentOffset (Paging) stopped by touch screen 【发布时间】:2019-05-12 13:15:43 【问题描述】:

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

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

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

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

我当前的解决方案是在 setContentOffset 之后设置 scrollView.isUserInteractionEnabled = false 并在调用 scrollViewDidEndScrollingAnimation 时将其设置回 true。这没关系,但我仍然想知道是否有任何好的方法可以做到这一点?

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

我在网上搜索,找不到任何关于这个问题的问题。

你能帮帮我吗?谢谢!

【问题讨论】:

【参考方案1】:

我想了很多办法,终于找到了正确的东西与大家分享。

解决方法是在scrollviewWillEndDragging中设置targetContentOffset,这样就可以得到我想要的了。

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

我从中学到的是,当你做分页效果时,永远不要打电话给setContentOffset。网上有些教程的分页是完全错误的。

【讨论】:

以上是关于UIScrollView setContentOffset(分页)被触摸屏停止的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView里面的UIScrollView:滚动

问题:UIScrollview 弹跳使父 UIScrollview 弹跳

UIScrollView 嵌入其他 UIScrollView

分页 UIScrollView 内的 UIScrollView

UIScrollView

UIscrollView