为啥我的 UICollectionViewCells 在动画超级视图约束更改时会更改 alpha 值?
Posted
技术标签:
【中文标题】为啥我的 UICollectionViewCells 在动画超级视图约束更改时会更改 alpha 值?【英文标题】:Why do my UICollectionViewCells change alpha value when animating a superview constraint change?为什么我的 UICollectionViewCells 在动画超级视图约束更改时会更改 alpha 值? 【发布时间】:2016-10-09 02:33:57 【问题描述】:我有一个包含多个子视图的超级视图,包括一个 UICollectionView。超级视图有一个布局约束,将其位置固定在屏幕底部。我想通过更改该约束然后在 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 值会发生变化以及如何防止这种情况发生的任何想法?
【问题讨论】:
你在这方面有什么收获吗? 【参考方案1】:通过对流布局进行子类化,我使单元格的 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
【讨论】:
以上是关于为啥我的 UICollectionViewCells 在动画超级视图约束更改时会更改 alpha 值?的主要内容,如果未能解决你的问题,请参考以下文章
为啥向 UICollectionViewCell 中的按钮添加操作效果不佳?
为啥点击 UICollectionViewCell 上的文本会消失?
为啥 UICollectionViewCell 在 Interface Builder Xcode7.1 OS X Yosemite 中的出口为零?
如何为我的自定义 UICollectionViewCell 设置属性