gpt4 book ai didi

swift - 单元格加载到 cellForItemAt 中,但未加载到 visibleCells 中

转载 作者:行者123 更新时间:2023-11-28 12:33:41 24 4
gpt4 key购买 nike

我有一个自定义的 UICollectionView 并且单元格加载到 cellForItemAt 中但是当我尝试使用 visibleCells 获取所有可见单元格时我没有获取所有单元格.

例如,在 cellForItemAt 中,我将单元格中标签的 alpha 设置为 0。平移时,我希望这些标签的 alpha 更改为 1:

func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
handleLabel(scrollView, active: true)
}

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
if pickerIsActive { handleLabel(scrollView, active: false) }
}

private func handleLabel(_ scrollView: UIScrollView, active: Bool) {
guard let pickerView = scrollView as? UICollectionView else { return }

let cells = pickerView.visibleCells.flatMap { $0 as? CustomCell }

panningIsActive = active

UIView.animate(duration: 0.3) {
cells.forEach { $0.label.alpha = $0.isSelected || active ? 1 : 0 }
}
}

和 cellForItemAt:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CustomCell

cell.label.alpha = 0

return cell
}

我该怎么做才能更改所有“已加载”单元格而不仅仅是“可见”单元格?

最佳答案

visibleCells 只是屏幕上的单元格。这曾经是在 cellForItem:at: 中初始化的所有内容,但从 iOS 10 开始,UICollectionView 现在会预取以提高滚动性能(see WWD 2016 video),这也许是您遇到此问题的原因。无论如何,听起来您想要做的就是让单元格在屏幕上出现时淡入动画。您可以将动画逻辑移动到 willDisplayCell或子类 UICollectionViewCell。 UIColectionViewCell 继承自 UIView,因此可以覆盖 didMoveToSuperView在您的 UICollectionViewCell 中并在那里调用您的动画方法,这将导致单元格在出现时进行动画处理。

关于swift - 单元格加载到 cellForItemAt 中,但未加载到 visibleCells 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41454880/

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