在 UicollectionViewCell 中更新 CollectionView 的大小

Posted

技术标签:

【中文标题】在 UicollectionViewCell 中更新 CollectionView 的大小【英文标题】:Update CollectionView´s size inside a UicollectionViewCell 【发布时间】:2014-07-09 23:19:43 【问题描述】:

我正在努力解决一些需要解决的问题。

我正在制作一个带有 uicollectionview 的应用程序,其中的单元格可以在其中包含另一个 uicollectionview,依此类推。 单元格的大小是该单元格内 uicollectionview 的完整 contentSize。

想象一下我的应用中有这样的结构:

MainCollection
    --Cell
        ...
    --Cell_6
      --ColectionviewA
        --Cell
          ...
        --Cell_66
          -- CollectionViewB
              --Cell_667

例如,Cell_667 的大小是从网络下载的异步图像大小的总动态手风琴大小。单元格下载为图像后,需要更新其大小。

当我发现我的问题时,我怎样才能告诉单元格的 “collectionview 父亲” 更新它的大小,然后建议是“父亲”更新大小,直到到达 MainCollection。

类似:

Cell_667(updateSizeCell) -> CollectionViewB(updateFrameSize) -> Cell_66(updateSizeCell) -> CollectionviewA (updateFrameSize) -> Cell_6(updateSizeCell)-> MainCollection(updatecontentSize)

目标是保持单个滚动。 我简单的解决方案是建议 MainCollection 重新加载所有单元格,但我想避免这种情况。知道如何让这种方式更高效、更干净吗?

任何提示将不胜感激。 提前致谢。

【问题讨论】:

【参考方案1】:

您基本上要做的是找出集合视图的contentSize 何时发生变化。有几种方法可以做到这一点。

最直接的方法可能是使用 Key-Value Observing。

在初始化每个集合视图后,将观察者添加到它们,如下所示:

[myCollectionView addObserver:self forKeyPath:NSStringFromSelector(@selector(contentSize)) options:0 context:nil];

然后,实现实际的观察方法:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context

    if([keyPath isEqualToString:NSStringFromSelector(@selector(contentSize))])
    
        UICollectionView *updatedCollectionView = (UICollectionView *)object;
        // update whatever you need to update here.
    

最后一点是记住在释放观察者时移除观察者(以防视图比观察者寿命更长)

[myCollectionView removeObserver:self forKeyPath:NSStringFromSelector(@selector(contentSize))];

如需了解更多信息,请查看the documentation 和Mattt Thompson's great post about it。

【讨论】:

但是还是有问题。我的 collectionView 更新它的 contentSize。单元格(拥有 collectionView 的人)如何知道需要更新其大小以适应与 collectionView 相同的大小? 你试过打电话给- (void)reloadItemsAtIndexPaths:(NSArray *)indexPaths吗?然后传入内部集合视图的indexPath。 但是如果我改变单元格本身的大小,collectionView 的 contentSize 只会变得“更大”

以上是关于在 UicollectionViewCell 中更新 CollectionView 的大小的主要内容,如果未能解决你的问题,请参考以下文章

在 asp.net 中更推荐的 301 重定向方式是啥?

在 SQL Server 2008 中更改行

哪个舍入舍入日期时间在 SQL 中更有效

pyqt - 在 TableView 中更改行~单元格颜色

如何在 IntelliJ 中更改线宽(从 120 个字符开始)

在 Python 中更清晰地显示 JSON 数据 [重复]