【问题标题】:Flicker while using layoutIfNeeded on containerview在容器视图上使用 layoutIfNeeded 时闪烁
【发布时间】:2015-10-20 04:36:38
【问题描述】:

我在情节提要中有一个控制器,它由两个容器视图组成。我将两个容器之间的垂直距离设置为零。

我想要的是在运行时更改其中一个容器的高度约束。

这里是改变约束的代码:

[UIView animateWithDuration:kAnimationDuration animations:^{
    self.offeringContainerHeightConstraint.constant = [SJDataManager shared].offeringItems.count * kOfferingCellHeight + kOfferingHeaderHeight;
    [self.view layoutIfNeeded];
}];

问题是,另一个容器视图在之前移动,因此两个容器之间存在空白区域,直到动画完成。

我希望两个容器视图应该同步更改它们的约束值,以便可以消除这种闪烁。

【问题讨论】:

  • 我认为(但我不确定)animateWithDuration 是在后台线程上执行的,而 layoutIfNeeded 应该在主线程上执行。如果你像这样封装它会发生什么 dispatch_async(dispatch_get_main_queue(), ^{[self.view layoutIfNeeded]; });
  • 它让整个动画一次出现,看起来很糟糕。
  • 我以为这是你的意图对不起。但至少闪烁消失了吗?
  • 是的,闪烁消失了,但我想要的是没有闪烁的动画。

标签: ios objective-c iphone ios7 storyboard


【解决方案1】:

我终于找到了解决方案。实际上,这是 expectedHeightForRowAtIndexPath 和 heightForRowAtIndexPath 之间的差异。由于这两种方法返回的高度不同,这就是我得到闪烁的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-06
    • 2015-03-25
    • 2014-08-18
    • 2011-07-03
    • 2013-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多