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

标签 ios uikit uicollectionview

当用户执行某些操作时,我需要将 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/

相关文章:

ios - CCAnimation 因无法识别的选择器 setDisplayFrame 而崩溃

objective-c - Obj-C,iOS,如何格式化国际货币的UITextField?

ios - Storyboard更改未在 iPhone 模拟器中更新

ios - 以表单大小显示弹出 View

ios - 错误EXC_BAD_ACCESS与scrollViewDidScroll

ios - 绘制自定义 CGContextRef - 大于框架?

ios - 如何更改 UIPopoverPresentationController 后面的叠加层的不透明度?

objective-c - 在发生自调整大小之前,如何准确地为 UICollectionViewLayout 提供矩形中的元素?

ios - 约束含糊地建议 tableview 单元格的内容 View 高度为零

swift - UISearchResultsUpdating 不根据 searchBar 文本过滤 collectionView