UICollectionView 上的动画自动布局约束更改

Posted

技术标签:

【中文标题】UICollectionView 上的动画自动布局约束更改【英文标题】:Animating auto layout constraint change on UICollectionView 【发布时间】:2014-01-09 23:11:11 【问题描述】:

从我问过的previous SO question 开始,我试图为UICollectionView(在示例中为yellowBox)的高度变化设置动画。通过使用以下代码修改集合视图上的自动布局约束来触发高度变化:

- (IBAction)expandYellowBox:(id)sender 

[UIView animateWithDuration:0.5
                 animations:^
                     self.yellowBoxHeightConstraint.constant += 50;
                     [self.view layoutIfNeeded];
                 ];

但是,当我调用 [self.view layoutIfNeeded] 时,这会导致集合视图被重新加载,因此它对用户可见。但是,我不希望重新加载集合视图,而只是为其高度变化设置动画。有什么方法可以避免-layoutIfNeeded 重新加载集合视图,或者另一种方法来动画约束高度变化,它不会调用具有重新加载集合视图副作用的方法?

【问题讨论】:

【参考方案1】:

万一其他人遇到这个问题,那是因为我实际上是在动画块上方几行调用[self.collectionView reloadData](并没有注意到!)。似乎调用-reloadData-layoutIfNeeded 会导致集合视图闪烁。删除对-reloadData 的调用即可解决问题。

【讨论】:

以上是关于UICollectionView 上的动画自动布局约束更改的主要内容,如果未能解决你的问题,请参考以下文章

如何更改自定义 UICollectionView 布局引擎中的默认布局动画曲线?

在 deleteItemsAtIndexPaths 上的 UICollectionView 中动画 contentOffset 更改

动画 UICollectionView contentInset 调整

在UICollectionView上动态设置布局会导致无法解释的contentOffset更改

如何可靠地确定 UICollectionView 布局何时完成动画

在布局之间制作动画时,自动布局不会调整 Uicollectionviewcell 项目的大小