2017-04-25 1 views
-1

Vis Problem lösen: http://i.imgur.com/TastPR9.gifvAnimate UICollectionViewLayout Kopfgröße verursacht unerwünschte Flash Quer

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

I UICollectionViewLayout eine Änderung der Kopfgröße eines UICollectionView durch es zu animieren bin versucht. Die resultierende Animation hat einen merkwürdigen Flash und Stretch, der irgendwo einen Cross-Solve-Übergang auslösen könnte. Ich habe viele Variationen des Layouts der Sammlungsansicht einschließlich setCollectionViewLayout (layout: animated :) und Implementierung von CollectionView (_ collectionView: layout: referenceSizeForHeaderInSection Abschnitt :) ausprobiert, aber alle ergeben die gleiche Animation.

Ich habe festgestellt, dass der gleiche Blitz auftritt, wenn Sie die Elementgröße der Sammlungsansicht ändern. Vielleicht ist das ein Standardverhalten, das ich ändern kann? Muss ich UICollectionViewFlowLayout von der Unterklasse ableiten? Ich habe versucht zu suchen und kann keine Lösung finden, würde nur einen Schritt in die richtige Richtung zu schätzen wissen.

Antwort

0

Diese endete für mich arbeiten:

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

} 
Verwandte Themen