【问题标题】:CSStickyHeaderFlowLayout Header FrameCSStickyHeaderFlowLayout 标题框架
【发布时间】:2015-10-17 20:43:33
【问题描述】:

编辑:我创建了一个非常小的应用程序,它完美地代表了这个问题。 https://drive.google.com/file/d/0B6sI4Feh1HJUb3pGa2pBUmY4QW8/view?usp=sharing

在示例应用程序中,我们只需向下滚动然后按顶部栏上的按钮即可查看我遇到的问题


我正在使用https://github.com/jamztang/CSStickyHeaderFlowLayout 在我的集合视图中具有粘性标题行为(如默认 UITableView)。

滚动浏览集合视图时效果很好。我在 collectionview 外有一个搜索栏,允许用户使用搜索文本过滤数据,每次用户输入字母时,我都会用找到的数据刷新 collectionview 的数据。

问题是,假设当前集合视图中有 4 个部分,并且它在底部完全滚动。当我输入一个特定的字母时,它会过滤掉除单个项目(带有单个标题)之外的所有内容。集合视图的内容大小随后会更改并显示正确的数据,但标题太低(请参见屏幕截图)。

我在 flowlayout 和 layoutAttributesForElementsInRect 内部进行了调查,我发现它实际上将框架的原点 Y 设置为 0(应该是这样),但似乎 collectionview 不使用这个值并使用前一个(这是收藏视图向下滚动的时候)。

知道什么会导致UICollectionView 不使用layoutAttributesForElementsInRect 中的所需框架吗?

【问题讨论】:

  • 您是否在托管图像的图像视图中设置了 clipToBounds?
  • 是的,这不是 imageView 问题

标签: ios ipad uicollectionview uicollectionviewlayout


【解决方案1】:

我试图解决这个问题,但在 UICollectionViewLayout 机制对我们来说是黑盒之前似乎是不可能的。自定义布局在 reloadData 上正确地将更新的框架返回到布局引擎:

但隐藏引擎甚至不询问属性是否相等。在您的情况下,您可以使用简单的解决方法。重新加载后只需更新contentOffset。:

[self.collectionView reloadData];
self.collectionView.contentOffset = CGPointZero;

【讨论】:

    猜你喜欢
    • 2015-01-18
    • 1970-01-01
    • 2017-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-20
    • 1970-01-01
    相关资源
    最近更新 更多