如何在不调用`layoutIfNeeded`的情况下为约束设置动画?

时间:2014-08-07 13:51:27

标签: objective-c ios7 uicollectionview autolayout uiviewanimation

在动画块中调用[self.view layoutIfNeeded];会导致其所有子视图设置动画。

这会导致滚动UICollectionView时出现问题,因为UICollectionViewCells会动画到屏幕上。

enter image description here

无论如何,我可以阻止Portsmouth单元格动画制作吗?

** 编辑 **

为了增加对伤害的侮辱,我正在制作控制UICollectionView高度的约束。为了增加Feed的大小,我有一个消失的UIView就像一个标题。

2 个答案:

答案 0 :(得分:4)

您可以在任何视图上layoutIfNeeded,因此可以考虑更改单元格的视图层次结构,以隔离包含需要动画的约束的视图。因此,您的layoutIfNeeded调用仅触发您要设置动画的约束的动画。那有意义吗?

这意味着将UIView插入到您的层次结构中,此视图将成为您通过约束设置动画的视图的超级视图。

答案 1 :(得分:0)

我花了好几个小时试图修复这个错误,最后我找到了解决方案:

[UIView setAnimationsEnabled:NO];
       // Layout cell
[UIView setAnimationsEnabled:YES];

我一直在使用框架,而不是自动布局,但也许有一种方法可以禁用动画以进行约束布局。

编辑:

你可以尝试:

-(void)layoutSubviews
{
[UIView setAnimationsEnabled:NO];
   [super layoutSubviews];
[UIView setAnimationsEnabled:YES];
}