动画显示UICollectionView补充视图的大小

时间:2015-04-10 17:10:08

标签: ios objective-c animation uicollectionview supplementary

我正在使用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) {
        }];

    }
}

2 个答案:

答案 0 :(得分:0)

您应该致电

,而不是尝试自己制作更改动画
[collectionView.collectionViewLayout invalidateLayout];

UICollectionView can't collapse or remove supplementary view

答案 1 :(得分:0)

要动画化大小更改,请使视图动画闭包内的布局无效。大小本身应通过适当的布局委托方法进行设置,例如collectionView(collectionView:collectionViewLayout:referenceSizeForHeaderInSection:)

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