当用户执行某些操作时,我需要将 UICollectionView
从底部向上拉到一定高度。由于新状态是完全可选的,因此 Collection View 是在以这种方式呈现之前创建的。从下到上的动画是通过更改 NSLayoutConstraint 的 constant
属性以及在某些动画 block 中调用 [view layoutIfNeeded]
来执行的。
问题是,这样做会使单元格以不期望的方式显示:它们从左上角扩展到指定的大小。我希望出现 Collection View ,并且其所有单元格都已按最终大小和外观布局。
我知道 UIView 的 setAnimationEnabled:
方法之类的东西,但我似乎找不到应该如何以及在哪里使用它(如果这是可行的方法)。
我猜问题是由于 Collection View 单元格被添加到 View 层次结构中,就在包含对[superviewlayoutIfNeeded]
的调用的动画 block 之前。这可能导致 UIKit 认为它也应该为布局的这些更改设置动画。如果是这种情况,解决方案可能是从动画中排除对 View 层次结构的特定更改。
最佳答案
从左上角展开通常是在原始 View 从未布局时在动画 block 中调用 layoutIfNeeded
的症状。您基本上是在对初始布局 channel 进行动画处理,其中所有 subview 都从 CGRectZero 开始。
要解决这个问题,你需要两件事:
- 确保您正在编辑的约束与 Collection View 的位置相关,而不是与大小相关。我的意思是,您并不是通过将 Collection View 的高度从零更改为最终值来呈现 Collection View 。
- 在编辑约束之前在 View 上调用
layoutIfNeeded
,然后在进行更改后在动画 block 中再次调用它。这样,您仅对指定约束的更改进行动画处理,而不是对整个布局进行动画处理。
关于ios - 呈现 UICollectionView 时防止 UICollectionViewCell 动画外观,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32321840/