gpt4 book ai didi

ios - 为什么我的 UICollectionViewCells 在动画 super View 约束更改时会更改 alpha 值?

转载 作者:行者123 更新时间:2023-12-02 15:51:14 27 4
gpt4 key购买 nike

我有一个包含多个 subview 的 super View ,其中包括 UICollectionView。 super View 有一个布局约束,将其位置固定在屏幕底部。我想通过更改该约束然后在 UIViewController 上调用 self.view.layoutIfNeeded() 来隐藏 View 。这工作得很好,除了 UICollectionView 的单元格在动画开始时下降到 alpha = 0,然后在结束时变回 alpha = 1。

这不是很明显,因为动画很快,但我不明白为什么会发生这种情况。没有其他 subview 具有此行为,并且 UICollectionView 本身不会更改 alpha...仅更改单元格。

隐藏我调用的 super View :

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

随着动画的缓慢速度(5秒),很明显细胞完全隐藏......然后淡入。我已经打破了内部:

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

您可以看到单元格正在重新加载(我也不明白,因为它只是上层约束发生了变化......而不是 UICollectionView 本身。

关于单元格的 alpha 值为何发生变化以及如何防止这种情况有什么想法吗?

最佳答案

通过对流布局进行子类化,我使单元格的 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
}

}

关于ios - 为什么我的 UICollectionViewCells 在动画 super View 约束更改时会更改 alpha 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39939413/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com