ios - UIScrollView setContentOffset(Paging)被触摸屏停止

标签 ios pagination uiscrollview uicollectionview uiscrollviewdelegate

我在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/

相关文章:

php - 使用 mysql_data_seek 进行分页的问题

grails - Grails在Liferay上进行portlet分页

ios - 如何打开从一个 UIWebView 到另一个 UIWebView 的链接?

ios - 延迟加载 UIScrollView 或 UITableView

iphone - 如何拥有无界的 UIScrollView

ios - 创建一组UIButton?

ios - attributesOfItem 仅在某些模拟器实例上抛出异常

ios - 使用核心数据存储自定义类

ios - iPhone中的UiWebview根据内容大小调整大小

sql - 对快速变化的数据库内容进行分页