【问题标题】:Animating a UICollectionView supplementary view resize动画 UICollectionView 补充视图调整大小
【发布时间】:2015-06-16 12:05:37
【问题描述】:

我正在使用 https://github.com/jamztang/CSStickyHeaderFlowLayout 的 CSStickyHeaderFlowLayout

作为我的应用程序的一部分,我在标题视图/单元格中有一个按钮,该按钮发送到它需要增长的集合视图。反过来,集合视图会更改 CSStickyHeaderFlowLayout 中的标头首选大小,并将 invalidateLayout 发送到 CSStickyHeaderFlowLayout。尝试通过动画块制作动画效果不佳,因为它将标题从按钮移动到顶部。这真的很奇怪。有没有办法让 flowLayout 正确地为补充视图中的变化设置动画?

这是我更改大小的代码。

- (void)treckDetailMapCellSizeToggle:(BOOL)toggle {
    //Modifier l'attribu de la map et invalider le layout pour le redessiner.
    CSStickyHeaderFlowLayout *layout = (id)self.collectionViewLayout;
    if ([layout isKindOfClass:[CSStickyHeaderFlowLayout class]]) {
        [UIView animateWithDuration:0.5 animations: ^{
            if (isMapCellExpended) {
                isMapCellExpended = NO;
                layout.parallaxHeaderReferenceSize = CGSizeMake(self.view.frame.size.width, HEADER_VIEW_PREFERED_SIZE);
            }
            else {
                isMapCellExpended = YES;
                layout.parallaxHeaderReferenceSize = CGSizeMake(self.view.frame.size.width, HEADER_VIEW_MAX_SIZE);
            }

            [layout invalidateLayout];
        }];
    }
}

这是一段视频,我点击了名为“Ajouter a la carte”的按钮。

https://www.youtube.com/watch?v=aqm99HebvwE

编辑:

感谢阅读此页面(我以前从未见过)。我发现这会使它变得更好,但不能解决问题。 :

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
    CSStickyHeaderFlowLayout *layout = (id)self.collectionViewLayout;

    if ([layout isKindOfClass:[CSStickyHeaderFlowLayout class]]) {
        [self.collectionView performBatchUpdates: ^{
            preferedSize = preferedSize == 200 ? 300 : 200;
            layout.parallaxHeaderReferenceSize = CGSizeMake(self.view.frame.size.width, preferedSize);
        } completion: ^(BOOL finished) {
        }];

    }
}

【问题讨论】:

    标签: ios objective-c animation uicollectionview supplementary


    【解决方案1】:

    要对尺寸变化进行动画处理,会使视图动画闭包中的布局无效。大小本身应通过适当的布局委托方法设置,例如collectionView(collectionView:collectionViewLayout:referenceSizeForHeaderInSection:)

    UIView.animate(withDuration: 0.33) {
      self.collectionView.collectionViewLayout.invalidateLayout()
    }
    

    【讨论】:

      【解决方案2】:

      您应该调用而不是尝试自己为更改设置动画

      [collectionView.collectionViewLayout invalidateLayout];
      

      UICollectionView can't collapse or remove supplementary view

      【讨论】:

      • 这不起作用。我最后发现只有 CollectionCells 可以有这种类型的动画。补充视图需要以其他方式(手动)进行动画处理,并与视图其余部分的动画同步。所以没有很好的方法来解决这个问题。可悲的是,它是 CollectionView 的一个缺陷。
      猜你喜欢
      • 2015-07-11
      • 2017-07-24
      • 2014-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-20
      • 2015-12-22
      • 2015-01-04
      相关资源
      最近更新 更多