我有一个包含多个子视图的超级视图,包括一个UICollectionView。 superview具有布局约束,将其位置固定到屏幕底部。我想通过更改该约束然后在UIViewController上调用self.view.layoutIfNeeded()
来隐藏视图。除了在动画开始时UICollectionView的单元格下降到alpha = 0,然后在结尾处更改回alpha = 1之外,这样可以正常工作。
动画很快就不会引人注目,但我不明白为什么会这样。没有其他子视图具有此行为,并且UICollectionView本身不会更改alpha ...只有单元格。
要隐藏我打电话的超级视图:
entryOffset.constant = entryHeight.constant
UIView.animateWithDuration(5, animations: {
self.view.layoutIfNeeded()
}) { (finished) in
}
由于动画速度慢(5秒),很明显细胞完全隐藏......然后淡入。我内心已经破了:
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {}
你可以看到正在重新加载单元格(我也不明白,因为它只是已经改变的上层约束......而不是UICollectionView本身。
有关为什么细胞的alpha值正在改变以及如何防止这种情况的任何想法?
答案 0 :(得分:2)
我通过子类化流程布局得到了单元格的alpha值不会改变:
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
}
}