首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UICollectionView contentOffset错了

UICollectionView contentOffset错了
EN

Stack Overflow用户
提问于 2017-08-02 00:21:25
回答 1查看 1.2K关注 0票数 1

我在普通的UICollectionView中设置了一个UIViewController,视图应该显示两种不同类型的数据/单元格,基于一个按钮切换的属性。数据源始终保持不变,它只是在每个按钮点击时重新填充。

无论何时触发按钮操作,它都会清空和填充主数据源数组,并在集合视图上调用-reloadData。这是很好的工作,没有意外的行为。

现在的问题是,滚动位置,也就是a。在更改过滤器后,contentOffset保持不变。因此,假设集合视图将显示A类型的单元格,我将开始快速滚动,点击按钮,并看到单元格更改为B类型,但仍然继续滚动。如果用户还记得的话,他们将不得不反复回滚到最后一个位置。

我试图通过在视图控制器中将一个scrollPositions NSMutableDictionary作为属性来解决这个问题。键表示过滤器类型(AB),值表示当前内容偏移量的y坐标(这是垂直滚动的集合视图)。

我遇到的问题是,尽管这似乎在某种程度上起作用,但contentOffset属性似乎随机地关闭了一定数量的像素,有时只是十几个像素,有时是半个屏幕的值。

到目前为止,我尝试过的是:

  • 捕获bounds
  • 调整edgesForExtendedLayout
  • automaticallyAdjustsScrollViewInsets设置为NO
  • 记住当前可见的索引路径,但这似乎有时也不正确。
  • 在捕获偏移量之前和还原偏移量之前在集合视图上调用-invalidateLayout,在父视图上调用-layoutIfNeeded
  • 直接切换到UIPageViewController,并为每个不同的过滤器拥有一个包含UICollectionViewUIViewController,但这带来了另一个问题。

但不幸的是,无论我尝试什么,我最终都会得到同样的结果。当返回到以前设置的过滤器时,它确实会更改回以前捕获的偏移量,这几乎是我停止的地方,但不完全是这样。老实说,我的智慧在这里结束了,有人还有什么建议吗?

也是,如果重要的话,这一切都是与AutoLayout一起建立的,而且过去在香草UIScrollView和AutoLayout上也有过一些不好的经历。也许有些问题是遗传的?

EN

回答 1

Stack Overflow用户

发布于 2017-08-02 01:09:33

您使用NSMutableDictionary的解决方案应该有效,只需记住在更改筛选器时停止滚动,这样您就可以在偏移量上获得尽可能高的精度。要停止当前滚动,请执行以下操作:

代码语言:javascript
复制
collectionView.isScrollEnabled = false

那就把它打开。

代码语言:javascript
复制
collectionView.isScrollEnabled = true
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45449551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档