2016-10-09 4 views
2

私は、UICollectionViewを含むいくつかのサブビューを含むスーパービューを持っています。スーパービューには、画面の下部にピンの位置を固定するレイアウト制約があります。その制約を変更し、UIViewControllerでself.view.layoutIfNeeded()を呼び出して、ビューを非表示にしたいとします。これは、UICollectionViewのセルがアニメーションの開始時にalpha = 0に落ち、最後にalpha = 1に戻ってしまうことを除いて、うまく動作します。スーパービューの制約のアニメーション化時にUICollectionViewCellsがアルファ値を変更するのはなぜですか?

アニメーションが速いのですばらしいことではありませんが、なぜこれが起こっているのか分かりません。他のサブビューではこのような振る舞いはなく、UICollectionView自体はアルファを変更しません。セルだけです。

私が呼ぶスーパー非表示にするには:アニメーション(5秒)の低速で

entryOffset.constant = entryHeight.constant 
UIView.animateWithDuration(5, animations: { 
    self.view.layoutIfNeeded() 
    }) { (finished) in 
} 

細胞が完全に...隠し、その後に戻ってフェードイン、私は内側に壊れていることは明らかであるが。 :

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {}

、あなたはそれは...ないUICollectionView自体変更されただけ上位レベルの制約であるので、私も理解していないいる(細胞が再ロードされていることがわかります

なぜ細胞のアルファ値が変化しているのか、どうすればこれを防ぐことができるのか?

+0

あなたは今までどこにでもこの上取得しましたか? –

答えて

1

私は、フローレイアウトをサブクラス化することで変更しないために細胞のアルファ値を得た:

import UIKit 

class NoFadeFlowLayout: UICollectionViewFlowLayout { 

    override func initialLayoutAttributesForAppearingItem(at itemIndexPath: IndexPath) -> UICollectionViewLayoutAttributes? { 
     let attrs = super.initialLayoutAttributesForAppearingItem(at: itemIndexPath) 
     attrs?.alpha = 1.0 
     return attrs 
    } 

    override func finalLayoutAttributesForDisappearingItem(at itemIndexPath: IndexPath) -> UICollectionViewLayoutAttributes? { 
     let attrs = super.finalLayoutAttributesForDisappearingItem(at: itemIndexPath) 
     attrs?.alpha = 1.0 
     return attrs 
    } 

} 
+0

それはいかがですか...ありがとう! – MobileVet

関連する問題