问题可见: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?我试过搜索并找不到解决方案,只是朝着正确的方向迈出了一步。
答案 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