Prevent unwanted animations on subviews when animating constraints(在设置约束动画时防止在子视图上设置不需要的动画)
问题描述
在设置UITableView高度的动画时,UITableViewCells上通常会出现不需要的动画。重新使用的新单元格会进入,并在布局的子视图上显示奇怪的、不需要的动画。这通常在表展开时可见。动画通常看起来像是从角落弹出的对象,因为出于某种原因,它将子视图的宽度和高度设置为从0到它们应该的大小。
这在某种程度上可以通过在单元格的layoutSubviews方法中重写来解决。
- (void)layoutSubviews
{
[UIView performWithoutAnimation:^{
[super layoutSubviews];
}];
}
但这仍然不能阻止包含的子视图执行不需要的动画。当您向单元格的contentView添加内容时,它也不能防止不需要的动画。如果每个子视图也有子视图,则基本上必须覆盖每个子视图的layoutSubviews方法。
这并不总是可能的,就像contentView的情况一样。我不能重写contentView类并告诉它在没有动画的情况下布局其子视图。这也是一个非常麻烦的修复,因为我需要将其添加到我能够覆盖的每个单独的UIView对象中。
我仍然没有找到一劳永逸地解决这个问题的答案。如何仅为某项约束设置动画,但防止其子视图上出现奇怪的不需要的动画。
推荐答案
我在UICollectionView中遇到了类似的问题,并能够在其委托中修复它:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
// setup your cell
// ...
[UIView performWithoutAnimation:^{
[cell layoutIfNeeded];
}];
return cell;
}
这篇关于在设置约束动画时防止在子视图上设置不需要的动画的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!