ios – 在呈现UICollectionView时防止UICollectionViewCell动画外观

当用户执行某些操作时,我需要将UICollectionView从底部拉到一定高度.由于新状态完全是可选的,因此集合视图就在以这种方式呈现之前创建.从底部到顶部的动画是使用对NSLayoutConstraint的常量属性的更改以及在某些动画块中调用[view layoutIfNeeded]来执行的.

问题在于,以这种方式做事会使单元格以不希望的方式出现:它们从左上角扩展到指定的大小.我希望集合视图能够出现,并且所有单元格都已经按照它们的最终尺寸和外观进行了布局.

我知道像UIView的setAnimationEnabled:方法之类的东西,但我似乎无法找到我应该如何以及在哪里使用它(如果这是要走的路).

我想这个问题是由于集合视图单元格被添加到视图层次结构中,就在包含对[superview layoutIfNeeded]的调用的动画块之前.这可能导致UIKit认为它也应该对布局的这些更改进行动画处理.如果是这种情况,那么解决方案可能就是从动画中排除,视图层次结构的特定更改.

解决方法

从左上角扩展通常是在原始视图从未布局时在动画块中调用layoutIfNeeded的症状.您基本上是为初始布局传递设置动画,其中所有子视图都是从CGRectZero开始的.

要解决它,你需要两件事:

>确保您编辑的约束与集合视图的位置有关,而不是与大小相关.我的意思是,你不是通过将其高度从零改为最终值来呈现你的集合视图.>在编辑约束之前在视图上调用layoutIfNeeded,然后在进行更改后再在动画块中再次调用它.这样,您只需将您指定的更改设置为约束,而不是整个布局.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...