【问题标题】:How to animate constraints without calling `layoutIfNeeded`?如何在不调用“layoutIfNeeded”的情况下为约束设置动画?
【发布时间】:2014-08-07 13:51:26
【问题描述】:

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

这会在滚动UICollectionView 时导致问题,因为UICollectionViewCells 会在屏幕上显示动画。

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

** 编辑 **

为了雪上加霜,我正在为控制UICollectionView 高度的约束设置动画。为了增加提要的大小,我有一个消失的UIView,就像一个标题。

【问题讨论】:

  • 您找到任何解决方案/解决方法了吗?我在使用约束动画时遇到了同样的问题
  • @virus - 就我而言,我将UICollectionView 设为全屏并改为动画contentInsets - 但是这导致了一些其他问题 - 我更希望解决这个集合视图错误:s
  • 我猜,让 Collection View 全屏并更改它的内容偏移量是目前唯一的方法?

标签: objective-c ios7 uicollectionview autolayout uiviewanimation


【解决方案1】:

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

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

【讨论】:

  • 啊,如果约束属于UICollectionView,我们该怎么办,有什么想法吗? - 我已经更新了问题。
【解决方案2】:

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

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

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

编辑:

你可以试试:

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

【讨论】:

  • 谢谢 Michal,我选择了内容插图动画。我会尝试看看关闭动画是否会解决自动布局的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-20
  • 1970-01-01
相关资源
最近更新 更多