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