2017-04-25 5 views
-1

Vis du problème: http://i.imgur.com/TastPR9.gifvtaille d'en-tête Animer UICollectionViewLayout provoque la dissolution croix flash indésirable

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(); 
    } 
} 

Je cherche à animer un changement de la taille d'en-tête d'un UICollectionView à travers ses UICollectionViewLayout. L'animation qui en résulte a un flash étrange et un étirement qui pourrait être une transition de dissolution croisée déclenchée quelque part. J'ai essayé de nombreuses variantes de mise en page de la vue de collection, y compris setCollectionViewLayout (layout: animated :) et implémentation de collectionView (_ collectionView: layout: referenceSizeForHeaderInSection section :) mais toutes résultent de la même animation.

J'ai remarqué que le même clignotement se produit lorsque vous modifiez la taille de l'élément de la vue de collection. Peut-être que c'est un comportement par défaut que je peux modifier? Dois-je sous-classer UICollectionViewFlowLayout? J'ai essayé de chercher et je ne trouve pas de solution, j'apprécierais juste un pas dans la bonne direction.

Répondre

0

Cela a fini par travailler pour moi:

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(); 
    }); 

}