Animate UICollectionViewLayout标头大小会导致不必要的闪存交叉溶解

时间:2017-04-25 21:12:27

标签: ios iphone swift uicollectionview uicollectionviewlayout

问题可见:http://i.imgur.com/TastPR9.gifv

func animateHeaderResize(height: CGFloat) {

    let layout = self.collectionView?.collectionViewLayout as! UICollectionViewFlowLayout;
    layout.headerReferenceSize = CGSize(width: UIScreen.main.bounds.width, height: height);

    UIView.animate(withDuration: 1, delay: 0, options: .curveEaseOut, animations: {
        self.collectionView?.layoutIfNeeded();
    }) { (finished) in
        //self.loadPosts();
    }
}

我试图通过它的UICollectionViewLayout来动画更改UICollectionView的标头大小。生成的动画有一个奇怪的闪光和拉伸,可能是在某处触发的交叉溶解过渡。我已经尝试了许多设置集合视图布局的变体,包括setCollectionViewLayout(layout:animated :)和实现collectionView(_ collectionView:layout:referenceSizeForHeaderInSection section :),但都产生了相同的动画。

我注意到在更改集合视图的项目大小时会发生相同的闪存。也许这是我可以修改的一些默认行为?我是否必须继承UICollectionViewFlowLayout?我试过搜索并找不到解决方案,只是朝着正确的方向迈出了一步。

2 个答案:

答案 0 :(得分:0)

这最终为我工作:

func animateHeaderResize(height: CGFloat) {

    self.collectionView?.performBatchUpdates({ 
        let layout = self.collectionView?.collectionViewLayout as! UICollectionViewFlowLayout;
        layout.headerReferenceSize = CGSize(width: UIScreen.main.bounds.width, height: height);
    }, completion: { (fin) in
        self.loadPosts();
    });

}

答案 1 :(得分:0)

看到相同的问题,如果设置,我可以看到动画看起来更好

false