我在普通的UICollectionView中设置了一个UIViewController,视图应该显示两种不同类型的数据/单元格,基于一个按钮切换的属性。数据源始终保持不变,它只是在每个按钮点击时重新填充。
无论何时触发按钮操作,它都会清空和填充主数据源数组,并在集合视图上调用-reloadData。这是很好的工作,没有意外的行为。
现在的问题是,滚动位置,也就是a。在更改过滤器后,contentOffset保持不变。因此,假设集合视图将显示A类型的单元格,我将开始快速滚动,点击按钮,并看到单元格更改为B类型,但仍然继续滚动。如果用户还记得的话,他们将不得不反复回滚到最后一个位置。
我试图通过在视图控制器中将一个scrollPositions NSMutableDictionary作为属性来解决这个问题。键表示过滤器类型(A或B),值表示当前内容偏移量的y坐标(这是垂直滚动的集合视图)。
我遇到的问题是,尽管这似乎在某种程度上起作用,但contentOffset属性似乎随机地关闭了一定数量的像素,有时只是十几个像素,有时是半个屏幕的值。
到目前为止,我尝试过的是:
boundsedgesForExtendedLayoutautomaticallyAdjustsScrollViewInsets设置为NO-invalidateLayout,在父视图上调用-layoutIfNeededUIPageViewController,并为每个不同的过滤器拥有一个包含UICollectionView的UIViewController,但这带来了另一个问题。但不幸的是,无论我尝试什么,我最终都会得到同样的结果。当返回到以前设置的过滤器时,它确实会更改回以前捕获的偏移量,这几乎是我停止的地方,但不完全是这样。老实说,我的智慧在这里结束了,有人还有什么建议吗?
也是,如果重要的话,这一切都是与AutoLayout一起建立的,而且过去在香草UIScrollView和AutoLayout上也有过一些不好的经历。也许有些问题是遗传的?
发布于 2017-08-02 01:09:33
您使用NSMutableDictionary的解决方案应该有效,只需记住在更改筛选器时停止滚动,这样您就可以在偏移量上获得尽可能高的精度。要停止当前滚动,请执行以下操作:
collectionView.isScrollEnabled = false那就把它打开。
collectionView.isScrollEnabled = truehttps://stackoverflow.com/questions/45449551
复制相似问题