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更改